2017-04-24 12 views
0

私は、異なるアルゴリズムを使用してランダムな迷路を生成し、異なるアルゴリズムを使って解くことができる小さなプロジェクトを作成しています。私はすでにアルゴリズムのいくつかのために深さ優先探索、*検索と再帰backtrackerを書かれているが、私はあなたは迷路の部分を生成するように見える見ることができるようにランダム化プリムのアルゴリズム

Maze

プリム行うことを試みたが残りの部分ではありません。異なる色の線は、画像のサイズを変更したときから、なぜそれがそれをしたのかわかりません。

私は、迷路生成アルゴリズム専用のwikipediaページ(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)です。 Visitedは単に0の配列で、1は訪問されたことを意味します。

+1

コードを表示してください。 – Paul

答えて

0

私は解決策を見つけました。私がMazeオブジェクトから正しい壁を得ることができなかったのは、まあまあの間違いでした。

関連する問題