Menu
CoddyTech

Rat in a Maze

MittelBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Eine Ratte startet in der linken oberen Zelle eines n × n-maze, wobei 1 eine offene Zelle und 0 eine Wand ist, und muss die rechte untere Zelle erreichen. Jeder Zug führt eine Zelle nach unten (D), links (L), rechts (R) oder oben (U) auf eine offene Zelle. Ein Pfad besucht keine Zelle zweimal und endet am Ausgang.

Gib jeden Pfad als Zeichenfolge von Zügen in alphabetischer Reihenfolge zurück oder ein leeres Array, wenn es keinen gibt.

Funktion

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
das n × n-Raster, mit 1 für ein freies Feld und 0 für eine Wand
Gibt zurückstring-array
jeden Pfad von oben links nach unten rechts als Folge von Bewegungen, in alphabetischer Reihenfolge

Einschränkungen

  • 2 ≤ n ≤ 5
  • maze[i][j] ist 0 oder 1.
  • Jedes Testlabyrinth hat höchstens 2.000 Wege. Ein offenes 5 × 5-Labyrinth hat 8.512 Wege und ist daher nicht in den Tests enthalten.

Beispiele

Eingabe
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Ausgabe
["RDDRDR", "RDRDDR"]
Erklärung
Zu Beginn ist nur die Zelle rechts offen, und von dort aus nur die Zelle darunter, daher beginnen beide Pfade mit RD. RDDRDR steht an erster Stelle, weil sein dritter Zug, D, vor R kommt.
challenge icon

Weiterführende Frage

Wenn alle vier Bewegungen erlaubt sind, kannst du die Wege zählen, ohne sie aufzulisten? Wie groß kann n werden, bevor die Anzahl außer Reichweite gerät?

Code zurücksetzen
def findPaths(maze):
    # Schreibe hier den Code

Test #1

Test #2

Argument

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

Erwartete Ausgabe

["RDDRDR", "RDRDDR"]