如何在遇到死胡同时以编程方式遍历迷宫

时间:2008-09-02 19:47:38

标签: c# artificial-intelligence maze

向前移动迷宫非常容易,但是我似乎无法弄清楚如何在没有回到太远的情况下通过迷宫来尝试新的路线?

3 个答案:

答案 0 :(得分:4)

通过保留一堆先前的方向决定来使用backtracking

答案 1 :(得分:2)

最简单的(实现)算法就是保留一堆你曾经去过的位置,以及从每个位置获取的路线,除非回溯为你提供这些信息。

要返回,只需从堆叠中弹出旧位置,然后检查该位置的更多退出,直到找到一个未经测试退出的旧位置。

通过每次以相同的顺序持续测试出口,如果您知道向某个位置的回溯来自下降(即,您上次离开旧位置时),那么您只需选择下一个方向向下

我不完全确定回到太远你的意思了,我会假设你想回到以前你没有经过测试的路线,那不是你想要的吗?

请注意,除非您尝试跟踪从起点到当前位置的路径,并在尝试查找新路线时避免使用这些方格,否则最终可能会进入圆圈,这最终会导致堆叠大。

一个简单的递归方法,标记所采用的路径,并且永远不会进入已标记的区域,这很容易做到这一点。

此外,如果您在迷宫中移动的事物比仅仅能够移动和击中(停在)墙壁更聪明,因为它可以从其当前点向所有方向看,我有其他可能有用的算法。

答案 2 :(得分:1)

Eric Lippert撰写了一系列关于创建C# implemention of A*的文章,这可能更有效。