0

Je suis en train d'écrire un petit projet qui vous permet de générer des labyrinthes aléatoires en utilisant différents algorithmes et de les résoudre en utilisant différents algorithmes. Je l'ai déjà écrit la recherche en profondeur d'abord, une recherche * et backtracker récursive pour certains des algorithmes mais j'ai essayé de faire primAlgorithme de Rand randomisé

Maze

Comme vous pouvez le voir, il semble générer une partie du labyrinthe mais pas le reste. Les différentes lignes de couleur sont à partir de quand j'ai redimensionné l'image, je ne sais pas pourquoi il l'a fait.

Je suis le pseudo-code de la page wikipedia dédiée aux algorithmes de génération de labyrinthe (https://en.wikipedia.org/wiki/Maze_generation_algorithm) et je ne vois aucune erreur dans mon code. Je vais poster le code si le problème ne peut pas être résolu avec une erreur stupide qui peut être évidente.

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) 

J'utilise un objet labyrinthe que je l'ai écrit mais simplement, wallarray est un tableau numpy de tous les murs dans le labyrinthe, le format [x] [y] [direction]. Si c'est 1 le mur est là, les directions sont (0 UP, 1 DROITE, 2 DOWN, 3 GAUCHE). Visited est simplement un tableau de 0, 1 signifie qu'il a été visité.

+1

Veuillez montrer votre code. – Paul

Répondre

0

Ok, j'ai trouvé la solution. C'était en effet une erreur stupide, où je n'obtenais pas les murs corrects de l'objet Maze.