题目大意:
给你一个八数码的序列,要求你在50步之内还原成,初始的形状,如果可以就输出其路径,否则就输出 This puzzle is not solvable.
解析:
这题是用A*算法实现的,上网查了很多资料,了解了什么是A*算法。
A*算法,实质上是根据估价函数进行bfs,每次都选取估价最小的状态,进行移动。
其中 f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价
f(n) = g(n) + h(n)
g(n)在该题中是当前的移动步数,h(n)是当前到状态到终点的曼哈顿距离
还有就是如何判断,15数码是否能满足条件。
设 e 表示空滑块所在的行,n 为在当前滑块之后出现小于当前滑块数值的滑块数目,N 为:
15 15
N = ∑ ni = ∑ ni
i = 1 i = 2
如果 N + e 为偶数,则当前局面有解,否则无解。如以下局面:
13 10 11 6
5 7 4 8
1 12 14 9
3 15 2 0
则有小于 13 并在之后出现滑块的数目为 12,小于 10 并在之后出现的滑块数目为 9,类似的,可以得到
其他滑块的 n 值分别为 9(11&#x