作者:6057318491 | 来源:互联网 | 2023-01-30 17:19
从左图,通过逐个将数字移入相邻的空白方格,变成右图:(排九宫)
876 123
543 456
210 780
0:代表空格!
求最快算法,请说明思路。
23 个解决方案
就是迷宫的基本算法就行
还有一种就是把要排的数字依次移到中间,然后转动周围的7个数,直到位置合适可以插入为止,这个算法优点是不要递规过程,不过又很多细节需要注意,其实也不是很好
问题点数太少了,我这儿有算法和相应的程序,要用A*算法,我大二花了一个学期才做完.
用不着什么高深的算法,宽度优先搜索即可。
只需要做一次初始化,即可应付任何的初始情况,需要程序和原代码的,留个信箱。
zj1163@sina.com
thank you.
用广度优先即可,时间空间都吃得消的。
对于无解情况也可以通过公式判断出来
15迷,也可以做得,也有公式,判断无解
x x x x 1 2 3 4
x x x x -> 5 6 7 8
x x x x 9 A B C
0 x x x D E F 0
九宫不是你说的那样的,而是这样的
6 1 8
7 5 3
2 9 4
横,竖,斜都是15.这才叫九宫
这是联发科技的笔试题,我今天才做过。
我当时想的是用深度优先搜索,如果在搜索过程中又遇到初始格局,就回退;如果遇到如右图的格局,就表明找到一种办法。
用这种办法时空效率比较低,应该有什么优化的办法,比如启发式搜索,博弈树等等。
倒是帖出算法啊。。。。
郁闷的是我们编译老师要我们做的,要用状态图做才行,没思路_.000..
同意楼上的说法。
把0看成要移动的格子,
876
543
210
0有两种移动的方法,就是向上移或是向左移。
876 或876
540 543
213 201
这两个结构分别和目标图: 123
456
780比较
那个相同位置的相同数字的个数,
然后在移动0,直到成为目标图。