Menu
CoddyTech

Rat in a Maze

MedioBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Un ratto parte dalla cella in alto a sinistra di un n × n maze, dove 1 indica una cella libera e 0 un muro, e deve raggiungere la cella in basso a destra. Ogni mossa va di una cella verso il basso (D), a sinistra (L), a destra (R) o verso l'alto (U), entrando in una cella libera. Un percorso non visita mai una cella due volte e termina all'uscita.

Restituisci ogni percorso come una stringa di mosse, in ordine alfabetico, oppure un array vuoto se non ce ne sono.

Funzione

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
la griglia n × n, con 1 per una cella aperta e 0 per un muro
Restituiscestring-array
ogni percorso dall'angolo in alto a sinistra a quello in basso a destra come una stringa di mosse, in ordine alfabetico

Vincoli

  • 2 ≤ n ≤ 5
  • maze[i][j] è 0 oppure 1.
  • Ogni labirinto di test ha al massimo 2,000 percorsi. Un labirinto aperto di 5 × 5 ne ha 8,512, quindi non è incluso nei test.

Esempi

Input
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Output
["RDDRDR", "RDRDDR"]
Spiegazione
All'inizio è aperta solo la cella a destra e, da lì, solo la cella sotto, quindi entrambi i percorsi iniziano con RD. RDDRDR viene prima nell'ordinamento perché la sua terza mossa, D, precede R.
challenge icon

Per approfondire

Con tutte e quattro le mosse consentite, riesci a contare i percorsi senza elencarli? Quanto può diventare grande n prima che il conteggio diventi irraggiungibile?

Ripristina il codice
def findPaths(maze):
    # Scrivi il codice qui

Test #1

Test #2

Argomento

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

Output atteso

["RDDRDR", "RDRDDR"]