我一直致力于一个需要随机迷宫生成的项目。在阅读wikipedia article之后,我决定使用基于提供here的算法的广度搜索算法。不幸的是,经过一些绘制到GUI的测试后,我注意到有时产生的迷宫不是“可解决的”,即你无法绘制从起始单元到“最终单元”的路径。更准确地说,wiki中描述的广度优先搜索算法实际上并没有考虑到结束点!我现在才意识到这一点,我想知道是否有办法解决这个问题?
总体问题:有没有办法确保从指定的起始单元格(在这种情况下为[0,0])到指定的结束单元格(让我们说[x,y])在广泛的第一个搜索迷宫生成算法?
这是python源代码(因为你可以看到它没有考虑到结束单元格)
def gen_maze(self):
current_loc = (0,0) #initial cell is (0,0)
visited = set([(0,0)])
stack = []
while len(visited) != len(self.grid):
neighbours = self.get_neighbours(current_loc, visited)
if neighbours != set():
neighbour = unlist(random.sample(neighbours, 1))
stack += [current_loc]
self.remove_wall_btwn(current_loc, neighbour)
current_loc = neighbour
visited.add(current_loc)
elif stack != []:
current_loc = stack.pop()
else:
current_loc = self.get_rand_loc(visited)
visited.add(current_loc)
大多数代码都是不言自明的(镜像维基百科伪代码)。需要注意的是,位置(x,y)实际上是标量,它们将在画布绘图代码中稍后与迷宫单元格的实际宽度相乘。