广度第一迷宫发生器不会产生“可解决的迷宫”

时间:2013-11-28 04:31:48

标签: python generator breadth-first-search maze

我一直致力于一个需要随机迷宫生成的项目。在阅读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)实际上是标量,它们将在画布绘图代码中稍后与迷宫单元格的实际宽度相乘。

0 个答案:

没有答案