觅算法--数字拼图算法

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:32:00
大家,肯定玩过这种小游戏:(一般现在文曲星还有这种老游戏)
3×3的方格,随机放置1,2,3,4,5,6,7,8这个八个数字,另一个是空格.
知道这种游戏的可以省去读这--(移动:空格四个方向(上下左右)的数字,可以移进空格,并且移后原数字处成为新的空格.)
当然,问题很简单,就是如何移动使得最后结果为:

1 2 3
4 5 6
7 8 0 --->0表示空格.

难度加深点就是,如何移动最少的次数来解决这个问题,时间尽量在1S钟内解决.

对于这个问题,肯定是搜索,但是我搜索学的不精通,最终没有解决出来.....现在这个问题,一直堵在胸口不是个味儿~~
我尝试过下思路:
很显然本问题,用一般搜索,会出现死循环.为了解决死循环问题,我首先想到了加深搜索(当然这方法也同时解决了”最少”的问题),但是效率很不理想,当数据一复杂了点.几乎是解决不出来.
后来,我想到了用空间换取时间(由于这是3×3格子,最多只有9!≈36万 个状态). 每次搜索,后保存已”走过的状态”来防止死循环.凭着感觉看,这种思路是没问题的.不知为什么,(也许我代码有问题),却也没有解决出来~~

在此,特地向大家请教学习.希望,能点拨一下,解决我心中的这个梗.(写代码的都知道那种问题没解决,憋在心里的滋味!)
在此,先谢谢各位.
如若在此不便指教,也可通过QQ联系我:411465294(不出意外,我QQ,这几天都开着.)

为了避免,有些人,拿难懂代码想混过的话,在此声明:本人只要算法,(语句最好精练,简洁).

LZ可以来这里看一下,说明很生动的,呵呵,而且也有源代码
http://www.cublog.cn/u/8780/showart.php?id=163291