解决8-puzzle游戏

时间:2013-03-26 13:37:31

标签: c++ algorithm distance puzzle 8-puzzle

我正在尝试用C ++编写一个8-puzzle游戏求解器,但是在做这件事时我遇到了很多问题。该计划目前正在运作,但解决这个难题需要太多步骤。我的意思是,有时它可以找到最佳解决方案,有时需要多达400步才能解决它。我的主要疑问如下。想象一下,我有这个图(这只是草稿):

enter image description here

我使用曼哈顿距离作为启发式功能。在第一步之后,我们有两个状态,其中f(n)= 5,所以我扩展了树。扩展后,我仍然有两个状态,其中f(n)= 2。这是我的疑问..我还需要扩展树,直到我得到一个独特的最低f(n)?

提前致谢!

3 个答案:

答案 0 :(得分:3)

  

我还需要扩展树

你无法贪婪地解决这个难题:总是采用具有较低启发价值的分支不会每次都引导你进入最终的解决方案。所以你必须保持其他状态的回溯。扩展它们的顺序,无论是简单的BFS还是基于启发式的A *,都取决于您。

答案 1 :(得分:1)

here您可以找到使用A *算法查找从初始状态到目标状态的最短路径的处理小程序。 applet中的代码是免费的。

答案 2 :(得分:0)

你所描述的不是A *,而是一些爬山的变种。它无法保证解决方案,更不用说最优解了。

为了保证完整性(即,如果存在完整性,总是找到解决方案),您需要在每个步骤中跟踪备选方案,以便在它们变得更有前途时可以回溯它们。

我写了一篇关于A *搜索算法的文章,并提供了使用A *和曼哈顿距离作为启发式的N-puzzle问题的实现:A* search explanation and N-puzzle python implementation