Menu
CoddyTech

Rat in a Maze

MedioBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Una rata comienza en la celda superior izquierda de un n × n maze, donde 1 es una celda abierta y 0 una pared, y debe llegar a la celda inferior derecha. Cada movimiento avanza una celda hacia abajo (D), hacia la izquierda (L), hacia la derecha (R) o hacia arriba (U) hasta una celda abierta. Un camino nunca visita una celda dos veces y termina en la salida.

Devuelve todos los caminos como cadenas de movimientos, en orden alfabético, o un arreglo vacío si no hay ninguno.

Función

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
la cuadrícula n × n, con 1 para una celda abierta y 0 para una pared
Devuelvestring-array
cada ruta desde la esquina superior izquierda hasta la esquina inferior derecha como una cadena de movimientos, en orden alfabético

Restricciones

  • 2 ≤ n ≤ 5
  • maze[i][j] es 0 o 1.
  • Cada laberinto de prueba tiene como máximo 2,000 caminos. Un laberinto abierto de 5 × 5 tiene 8,512, así que no está en las pruebas.

Ejemplos

Entrada
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Salida
["RDDRDR", "RDRDDR"]
Explicación
Al principio solo está abierta la celda de la derecha y, desde allí, solo la celda de abajo, así que ambos caminos comienzan con RD. RDDRDR va primero en el orden porque su tercer movimiento, D, va antes que R.
challenge icon

Para ir más allá

Con los cuatro movimientos permitidos, ¿puedes contar los caminos sin enumerarlos? ¿Qué tan grande puede ser n antes de que el recuento sea inalcanzable?

Restablecer código
def findPaths(maze):
    # Escribe el código aquí

Prueba #1

Prueba #2

Argumento

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

Salida Esperada

["RDDRDR", "RDRDDR"]