2013-05-16 42 views
-3

我在網上和其他地方(包括我的書)看過,但我並沒有真正看到我正在尋找的答案。讓我一直呆到這個可怕的時刻(上午5:25)的大部分是回溯。這甚至如何工作?當我全面封鎖時,我只是把「迴歸」,它神奇地解除了我的最後一步?我難以置信地搖頭,因爲我一直認爲只要你「迴歸」,你的遞歸就完全展開。我無法編寫代碼來遞歸地解決迷宮問題(回溯)

我的代碼太長了,我也有點惱火。我的老師告訴全班,它應該是一個很短的解決方案。那麼,我不得不加載迷宮,檢查事情,編寫檢查方向的算法(我只是修改它是遞歸的,但我幾乎100%肯定它是錯誤的)。更不用說初始化對象陣列並且寫一個尋找超空間點傳送到的專門方法。無論如何,在這裏。我知道它有些沒有作用。畢竟,我還沒有完成它。 http://pastebin.com/5wknVCWa是的,我粘貼它,因爲它確實有點大。超過300行。

+0

這是很難看你用你自己的問題標籤的問題嗎? http://stackoverflow.com/questions/tagged/maze-solving –

+0

'return'只返回當前的方法調用,而不是全部。 – Patashu

回答

3

回溯算法很短。它不一定是遞歸的(但它看起來好多了)。你所做的主要工作是編寫一個拒絕函數,它檢查當前的決定是否仍然正常。如果沒有,那麼你回溯(即從單一遞歸級別返回)到以前的決定。

在迷宮中,拒絕功能可能是你剛剛走進了一堵牆 - 或者被一隻格魯吃掉了。在接受功能可能意味着你完成迷宮和完成(或救出王子等)

http://en.wikipedia.org/wiki/Backtracking

procedure bt(c) 
    if reject(P,c) then return 
    if accept(P,c) then output(P,c) 
    s ← first(P,c) 
    while s ≠ Λ do 
    bt(s) 
    s ← next(P,s)