2013-05-16 45 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)