Menu
CoddyTech

Rat in a Maze

Un rat commence dans la cellule en haut à gauche d’un n × n maze, où 1 représente une cellule libre et 0 un mur, et doit atteindre la cellule en bas à droite. Chaque déplacement se fait d’une cellule vers le bas (D), la gauche (L), la droite (R) ou le haut (U), vers une cellule libre. Un chemin ne passe jamais deux fois par la même cellule et se termine à la sortie.

Renvoyez tous les chemins sous forme de chaînes de déplacements, par ordre alphabétique, ou un tableau vide s’il n’y en a aucun.

Fonction

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
la grille n × n, avec 1 pour une case libre et 0 pour un mur
Renvoiestring-array
chaque chemin du coin supérieur gauche au coin inférieur droit sous forme d’une chaîne de déplacements, par ordre alphabétique

Contraintes

  • 2 ≤ n ≤ 5
  • maze[i][j] est 0 ou 1.
  • Chaque labyrinthe de test comporte au plus 2 000 chemins. Un labyrinthe ouvert de 5 × 5 en comporte 8 512, il ne fait donc pas partie des tests.

Exemples

Entrée
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Sortie
["RDDRDR", "RDRDDR"]
Explication
Au départ, seule la case à droite est ouverte, et à partir de là, seule la case en dessous l’est ; les deux chemins commencent donc par RD. RDDRDR vient en premier dans l’ordre de tri, car son troisième déplacement, D, vient avant R.
challenge icon

Pour aller plus loin

Avec les quatre déplacements autorisés, peux-tu compter les chemins sans les énumérer ? Jusqu’à quelle valeur n le compte reste-t-il accessible ?

Réinitialiser le code
def findPaths(maze):
    # Écrivez le code ici

Test #1

Test #2

Argument

maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]

Résultat attendu

["RDDRDR", "RDRDDR"]