【发布时间】:2017-01-30 19:43:51
【问题描述】:
如何找到通过递归回溯生成的迷宫的起点和终点?
似乎很难弄清楚,因为迷宫从来没有ends。这会是你第一次开始回溯的地方吗?起点可能是您的起点,但有时会有更好的起点。
【问题讨论】:
-
您可以定义最大步数,并在找到每个组合后增加此数字。
标签: maze recursive-backtracking
如何找到通过递归回溯生成的迷宫的起点和终点?
似乎很难弄清楚,因为迷宫从来没有ends。这会是你第一次开始回溯的地方吗?起点可能是您的起点,但有时会有更好的起点。
【问题讨论】:
标签: maze recursive-backtracking
当你像这样使用递归回溯生成迷宫时:
http://weblog.jamisbuck.org/2010/12/27/maze-generation-recursive-backtracking
然后所有的单元格都连接起来了,并且在任意两个单元格之间旅行只有一种方式,而无需回溯你的脚步。
你可以选择任何你喜欢的起点和终点!
请注意,像迷宫单元一样连接的图是无向树。如果你想找到相距最远的两个点,以便你可以将它们作为起点和终点,那么你需要找到这棵树的直径。
有很多方法可以做到这一点,但最简单的是:
1) 选择一个随机顶点开始,并使用 BFS 找到离它最远的/一个顶点。这将是您的起点。
2) 使用 BFS 找到离起始顶点最远的/a 顶点。那是你的终点。
起点和终点将尽可能远。
这个问题的答案解释了为什么它总是有效:Proof of correctness: Algorithm for diameter of a tree in graph theory
请注意,相距最远的点不一定在边缘上。我发现当您需要时,在边缘选择随机点可以正常工作:https://mtimmerm.github.io/webStuff/maze.html
【讨论】: