Python 宽度优先的迷宫发生器不';t生成";“可解迷宫”;
我一直在做一个需要随机生成迷宫的项目。在阅读了关于它的文章之后,我决定使用基于所提供的算法的广度搜索优先算法。不幸的是,在对GUI绘图进行了一些测试之后,我注意到有时生成的迷宫无法“解决”,即无法绘制从起始单元格到“最终单元格”的路径。更准确地说,wiki中描述的广度优先搜索算法实际上并不能解释终点!我现在才意识到这一点,我想知道是否有办法解决这个问题 总体问题:在广度优先搜索迷宫生成算法中,是否有办法确保从指定的起始单元格(本例中为[0,0])到指定的结束单元格(比如[x,y])的路径 这是python源代码(正如您所看到的,它不考虑结束单元格)Python 宽度优先的迷宫发生器不';t生成";“可解迷宫”;,python,generator,breadth-first-search,maze,Python,Generator,Breadth First Search,Maze,我一直在做一个需要随机生成迷宫的项目。在阅读了关于它的文章之后,我决定使用基于所提供的算法的广度搜索优先算法。不幸的是,在对GUI绘图进行了一些测试之后,我注意到有时生成的迷宫无法“解决”,即无法绘制从起始单元格到“最终单元格”的路径。更准确地说,wiki中描述的广度优先搜索算法实际上并不能解释终点!我现在才意识到这一点,我想知道是否有办法解决这个问题 总体问题:在广度优先搜索迷宫生成算法中,是否有办法确保从指定的起始单元格(本例中为[0,0])到指定的结束单元格(比如[x,y])的路径 这是p
大部分代码都是不言自明的(与维基百科的伪代码类似)。需要注意的是,位置(x,y)实际上是标量,在画布绘制代码中,它乘以迷宫单元的实际宽度 尝试在该wiki页面上查找Primm或Kruskal的算法。@alecbenzer这些算法能保证从指定的起点(0,0)到达指定的终点(x,y)吗?我仔细阅读了这些,但我并没有真正看到任何东西在广度优先搜索方面将它们区分开来。在我看来,你的算法将“访问”网格的每个单元。。。所以每个细胞从一开始就应该是可以到达的,不是吗?为什么不呢?编辑:啊,
get\u rand\u loc(已访问)
返回一个曾经访问过或没有访问过的随机单元格?我认为它应该返回一个随机的已经访问过的单元,否则它确实会启动一个断开连接的组件。
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)