2017-04-24 108 views
0

我正在寫一個小項目,允許您使用不同的算法生成隨機迷宮,並使用不同的算法求解。我已經寫深度優先搜索,A *搜索和遞歸backtracker對於一些算法,但我試圖做一本正經隨機Prim的算法

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

請顯示您的代碼。 – Paul

回答

0

好的我找到了解決方案。這確實是一個愚蠢的錯誤,我沒有從迷宮對象那裏得到正確的牆。