我无法编写代码来递归地解决迷宫(回溯)

时间:2013-05-16 10:35:42

标签: java recursion maze

我查看了互联网和其他地方(包括我的书),但我似乎并没有得到我正在寻找的答案。在这个可怕的时刻(早上5点25分)让我保持活力的重要部分是回溯。这怎么工作?当我被四面挡住时,我只是把“回归”,它神奇地撤消了我的最后一招?我难以置信地摇头,因为我一直认为,只要你“回归”,你的递归就会彻底解开。

我的代码太久了,我也有点恼火。我的老师告诉班上这应该是一个简短的解决方案。好吧,我不得不加载迷宫,检查事情,编写检查方向的算法(我只是将其修改为递归,但我几乎100%确定它是错误的)。更不用说初始化对象数组并编写专门的方法来寻找远程传送到的超空间点。无论如何,这里是。我知道其中一些没有做任何事情。毕竟,我还没有完成它。 http://pastebin.com/5wknVCWa是的,我将它粘贴在那里,因为它确实有点大。超过300行。

1 个答案:

答案 0 :(得分:3)

回溯算法很简短。它不必是递归的(但它看起来更好)。你做的主要工作是写一个拒绝函数,检查当前的决定是否仍然正常。如果没有,那么你回溯(即从单级递归返回)到先前的决定。

在一个迷宫中,拒绝功能可能是你刚刚走进一堵墙 - 或者被一个grue吃掉了。接受功能可能意味着你已完成迷宫并完成(或救出王子等)

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)