Menu
CoddyTech

Rat in a Maze

SedangBacktrackingpython iconjava iconcpp iconc iconjs icon+10

Seekor tikus mulai di sel kiri atas pada maze berukuran n × n, dengan 1 sebagai sel terbuka dan 0 sebagai dinding, dan harus mencapai sel kanan bawah. Setiap langkah berpindah satu sel ke bawah (D), kiri (L), kanan (R), atau atas (U) menuju sel terbuka. Sebuah jalur tidak pernah mengunjungi sel yang sama dua kali dan berakhir di pintu keluar.

Kembalikan setiap jalur sebagai string berisi langkah-langkah, dalam urutan alfabetis, atau array kosong jika tidak ada.

Fungsi

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
kisi-kisi n × n, dengan 1 untuk sel terbuka dan 0 untuk dinding
Mengembalikanstring-array
setiap jalur dari kiri atas ke kanan bawah sebagai string gerakan, dalam urutan alfabetis

Batasan

  • 2 ≤ n ≤ 5
  • maze[i][j] bernilai 0 atau 1.
  • Setiap labirin dalam pengujian memiliki paling banyak 2,000 jalur. Labirin terbuka 5 × 5 memiliki 8,512 jalur, jadi labirin itu tidak termasuk dalam pengujian.

Contoh

Input
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
Output
["RDDRDR", "RDRDDR"]
Penjelasan
Sejak awal, hanya sel di sebelah kanan yang terbuka, lalu dari sana hanya sel di bawah yang terbuka, jadi kedua jalur dimulai dengan RD. RDDRDR diurutkan lebih dulu karena gerakan ketiganya, D, berada sebelum R.
challenge icon

Pertanyaan lanjutan

Dengan keempat gerakan diizinkan, bisakah kamu menghitung jalurnya tanpa mencantumkannya satu per satu? Seberapa besar nilai n sebelum jumlahnya tak lagi bisa dihitung?

Reset kode
def findPaths(maze):
    # Tulis kodemu di sini

Tes #1

Tes #2

Argumen

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

Output yang diharapkan

["RDDRDR", "RDRDDR"]