2014-12-02 41 views
-2

我正在爲我的編程任務創建A *搜索方法。我的問題是,A *搜索方法應該找到最低成本的路徑,並始終找到目標狀態。但是,我的代碼並不能解決某些難題的問題。例如,對於拼圖:A *搜索未完成[8謎求解器]

*=====* 
    ||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

+0

請參閱http://stackoverflow.com/questions/4734108/what-is-the-maximum-depth-of-the-java-call-stack – irrelephant 2014-12-02 21:02:23

+0

未提供Board類的代碼。 – 2014-12-02 21:06:46

+0

請不要鏈接到外部資源,具體的代碼應該直接在這裏發佈。 – tnw 2014-12-02 21:16:56

回答

0

你忽略了您的解決方案可解的問題。你的文章中的第二個配置是不可解的,你的A *算法進入無限遞歸,導致StackOverflowError。

這個謎題的可解性可以很容易地通過檢查排列奇偶性和0瓦片距目標位置的距離來確定。詳情請參閱this link