随机Prim算法

时间:2017-04-24 12:31:54

标签: python algorithm pygame depth-first-search prims-algorithm

我正在编写一个小项目,允许您使用不同的算法生成随机迷宫并使用不同的算法进行求解。我已经为一些算法编写了深度优先搜索,A *搜索和递归回溯,但我已经尝试过做

Maze

正如你所看到的,它似乎产生了迷宫的一部分而不是其余部分。不同的颜色线来自我调整图像大小时,不知道为什么会这样做。

我正在关注专门用于迷宫生成算法的维基百科页面中的伪代码(https://en.wikipedia.org/wiki/Maze_generation_algorithm),我在代码中看不到任何错误。如果问题无法用一些可能很明显的愚蠢错误解决,我会发布代码。

def primsGeneration(Maze):
   nindex = [2, 3, 0, 1]
   startcell = [np.random.randint(0, Maze.size[0] - 1), np.random.randint(0, Maze.size[1] - 1)]
   Maze.visited[startcell[0]][startcell[1]] = 1
   walls = [[startcell[0], startcell[1], 0], [startcell[0], startcell[1], 1], [startcell[0], startcell[1], 2], [startcell[0], startcell[1], 3]]
   while len(walls) != 0:
       walls2add = []
       np.random.shuffle(walls)
       if walls[0][2] == 0: index = [walls[0][0], walls[0][1] - 1]
       elif walls[0][2] == 1: index = [walls[0][0] + 1, walls[0][1]]
       elif walls[0][2] == 2: index = [walls[0][0], walls[0][1] + 1]
       else: index = [walls[0][0] - 1, walls[0][1]]
       if Maze.validatecurrentpos(index):
           if int(Maze.visited[walls[0][0]][walls[0][1]]) ^ int(Maze.visited[index[0]][index[1]]):
                Maze.wallarray[walls[0][0]][walls[0][1]][walls[0][2]] = 0
                Maze.wallarray[index[0]][index[1]][nindex[walls[0][2]]] = 0
                Maze.visited[index[0]][index[1]] = 1
                w2a = Maze.wallarray[index[0]][index[1]]
                for wall in w2a:
                    walls2add.append([index[0], index[1], wall])
                for wall in walls2add:
                    walls.append(wall)
        walls.pop(0)

我正在使用我写过的迷宫对象,但简单来说,wallarray是迷宫中所有墙壁的numpy数组,格式为[x] [y] [方向]。如果它是1,则墙壁在那里,方向是(0 UP,1 RIGHT,2 DOWN,3 LEFT)。访问的只是一个0的数组,1表示它已被访问过。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。这确实是一个愚蠢的错误,我没有从迷宫对象那里得到正确的墙壁。