使用回溯递归自我避免步行

时间:2012-06-17 14:11:36

标签: c recursion backtracking

给定:网格m×n
我需要枚举所有路径不超过一个交叉点,并使用回溯和递归结束在右上角!有什么建议 。?
Self-Avoiding Walk

1 个答案:

答案 0 :(得分:3)

非递归方式是保留一堆先前的位置和需要在该位置做出决定的信息。每次做出决定时,将需要保存的信息推送到堆栈顶部。

然后,当您的搜索向前找到问题时,它会弹出堆栈并跳回到最近的决策点并做出不同的决定。最终你要么成功,要么消除所有可能的路径。

对于递归解决方案,它是相同的,除了不将信息推送到堆栈上,您在递归调用中做出决定后传递新位置。如果递归调用返回失败,则在当前位置尝试下一个可能的决策。如果当前位置的选择用完,请将失败返回到上述级别。只有当递归调用返回成功时,此级别才会返回成功。

同样,最终会在整个调用链中返回成功,或者消除所有可能的路径。

由于这是家庭作业,您必须自己决定需要从一个级别传递到下一个级别的信息,以及如何将最终成功路径返回给应用程序。

您需要的所有新想法都在上面的段落中。实施仍由您自己决定。

-Jesse