0
我正在写一个小项目,允许您使用不同的算法生成随机迷宫,并使用不同的算法求解。我已经写深度优先搜索,A *搜索和递归backtracker对于一些算法,但我试图做一本正经随机Prim的算法
正如你可以看到它似乎产生迷宫的一部分,但不是其余。不同的颜色线是从我调整图像大小时起,不知道它为什么这样做。
我正在关注迷宫生成算法专用的维基百科页面的伪代码(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意味着它已被访问。
请显示您的代码。 – Paul