Menu
CoddyTech

Rat in a Maze

MédioBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Um rato começa na célula superior esquerda de um n × n maze, onde 1 é uma célula livre e 0 uma parede, e deve chegar à célula inferior direita. Cada movimento avança uma célula para baixo (D), para a esquerda (L), para a direita (R) ou para cima (U), entrando em uma célula livre. Um caminho nunca visita uma célula duas vezes e termina na saída.

Retorne todos os caminhos como strings de movimentos, em ordem alfabética, ou um array vazio se não houver nenhum.

Função

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
a grade n × n, com 1 para uma célula aberta e 0 para uma parede
Retornastring-array
cada caminho do canto superior esquerdo ao canto inferior direito como uma sequência de movimentos, em ordem alfabética

Restrições

  • 2 ≤ n ≤ 5
  • maze[i][j] é 0 ou 1.
  • Cada labirinto de teste tem no máximo 2.000 caminhos. Um labirinto aberto de 5 × 5 tem 8.512, então não está nos testes.

Exemplos

Entrada
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Saída
["RDDRDR", "RDRDDR"]
Explicação
No início, apenas a célula à direita está aberta e, a partir dela, apenas a célula abaixo, então os dois caminhos começam com RD. RDDRDR vem primeiro na ordenação porque seu terceiro movimento, D, vem antes de R.
challenge icon

Para ir além

Com os quatro movimentos permitidos, você consegue contar os caminhos sem listá-los? Até que valor n pode chegar antes que a contagem fique fora de alcance?

Redefinir código
def findPaths(maze):
    # Escreva o código aqui

Teste #1

Teste #2

Argumento

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

Saída Esperada

["RDDRDR", "RDRDDR"]