你如何找到递归回溯迷宫的起点和终点?

How do you find the start and end of a recursive backtracking maze?

你如何找到递归回溯生成的迷宫的起点和终点? 似乎很难弄清楚,因为迷宫从来没有ends。这会是你第一次开始回溯的地方吗?起点可以是您的起点,但有时会有更好的起点。

当你用这样的递归回溯生成迷宫时:

http://weblog.jamisbuck.org/2010/12/27/maze-generation-recursive-backtracking

那么所有的单元格都连接起来了,并且只有一种方法可以在任意两个单元格之间穿行而不用折返。

您可以选择任何您喜欢的起点和终点!

请注意,像迷宫单元一样连接的图,即从任何顶点到任何其他顶点只有一条路径,是一棵无向树。如果你想找到相距最远的两个点,以便你可以将它们作为起点和终点,那么你需要找到这棵树的直径。

有很多方法可以做到这一点,但最简单的是:

1) 选择一个随机顶点开始,然后使用 BFS 找到离它最远的 the/a 个顶点。那将是你的起点。

2) 使用 BFS 找到距离起始顶点最远的 the/a 个顶点。那就是你的终点。

起点和终点会尽可能远。

这个问题的答案解释了为什么总是有效:Proof of correctness: Algorithm for diameter of a tree in graph theory

请注意,相距最远的点不一定在边缘上。我发现在你需要的时候,在边缘上选择随机点可以很好地工作:https://mtimmerm.github.io/webStuff/maze.html