Menu
CoddyTech

Rat in a Maze

ŚrednieNawrotypython iconjava iconcpp iconc iconjs icon+10

Szczur zaczyna w lewym górnym polu n × n maze, gdzie 1 oznacza wolne pole, a 0 ścianę, i musi dotrzeć do prawego dolnego pola. Każdy ruch prowadzi o jedno pole w dół (D), w lewo (L), w prawo (R) lub w górę (U), na wolne pole. Ścieżka nigdy nie odwiedza tego samego pola dwukrotnie i kończy się przy wyjściu.

Zwróć każdą ścieżkę jako ciąg ruchów, w kolejności alfabetycznej, lub pustą tablicę, jeśli nie ma żadnej.

Funkcja

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
siatka n × n, gdzie 1 oznacza wolne pole, a 0 ścianę
Zwracastring-array
każdą ścieżkę od lewego górnego rogu do prawego dolnego jako ciąg ruchów, w kolejności alfabetycznej

Ograniczenia

  • 2 ≤ n ≤ 5
  • maze[i][j] ma wartość 0 lub 1.
  • Każdy labirynt testowy ma co najwyżej 2 000 ścieżek. Otwarty labirynt 5 × 5 ma ich 8 512, więc nie występuje w testach.

Przykłady

Wejście
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Wyjście
["RDDRDR", "RDRDDR"]
Wyjaśnienie
Na początku otwarta jest tylko komórka po prawej, a stamtąd tylko komórka poniżej, więc obie ścieżki zaczynają się od RD. RDDRDR jest pierwsza w kolejności sortowania, ponieważ jej trzeci ruch, D, występuje przed R.
challenge icon

Pytanie dodatkowe

Gdy dozwolone są wszystkie cztery ruchy, czy potrafisz policzyć ścieżki bez ich wypisywania? Jak duże może być n, zanim policzenie ich stanie się poza zasięgiem?

Zresetuj kod
def findPaths(maze):
    # Wpisz kod tutaj

Test #1

Test #2

Argument

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

Oczekiwany wynik

["RDDRDR", "RDRDDR"]