15 Puzzle
是涉及启发式的建模算法的经典问题。针对此问题的常用启发式方法包括计算错放的磁贴的数量,并找出每个块与其在目标配置中的位置之间的曼哈顿距离的总和。请注意,两者都是可接受的,即它们永远不会高估剩余的移动次数,这可确保某些搜索算法(如A *)的最佳性。
Heuristic
是正确的,A*
似乎很有效,您是否有例子,可能在c
或java
?答案 0 :(得分:8)
我的选择启发式是找出排列中所有倒置的总和是奇数还是偶数 - 如果是偶数,那么15Puzzle是可解的。
排列中的倒置数等于其倒排列的倒数(Skiena 1990,p.29; Knuth 1998)。
只有我知道它可以解决才有意义解决它。那么任务就是减少逆,并解决中提问题。要找到一个解决方案,不应该超过80步。
排列方程是:
<0>范围为0至16的因子是{1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,87178291200,1307674368000,20922789888000}。如果您需要更多,请搜索WolframAlpha Range[1,20]!
如果您想了解更多信息,请阅读:15Puzzle。
答案 1 :(得分:1)
使用A *算法在{+ 3p>中使用C ++实现十五个拼图