A *搜索无法完成[8 Puzzle Solver]

时间:2014-12-02 21:00:39

标签: java search

我正在为我的编程任务创建一个A *搜索方法。我的问题是A *搜索方法应该找到成本最低的路径并始终找到目标状态。但是,我的代码并没有解决某些难题的问题。例如,对于拼图:

  *=====*
  ||103||
  ||426||
  ||758||
  *=====*

达到了所需的目标状态,但对于拼图更多的拼图不合适。例如,拼图:

  *=====*
  ||104||
  ||326||
  ||758||
  *=====*

产生以下错误:

    Step: 3073
    *=====*
    ||016||
    ||342||
    ||758||
    *=====*
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:680)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129)
at java.io.PrintStream.write(PrintStream.java:526)
at java.io.PrintStream.print(PrintStream.java:669)
at java.io.PrintStream.println(PrintStream.java:806)

我的代码可以在这里找到: http://pastebin.com/rwq3cTAq

1 个答案:

答案 0 :(得分:0)

您忽略了解决方案中的可解决性问题。帖子中的第二个配置无法解决,您的A *算法进入无限递归,导致StackOverflowError。

通过检查置换奇偶校验和0块与目标位置的距离,可以很容易地确定这个难题的可解性。有关详细信息,请参阅this link