Nama : Muhammad Lukman!Nurhakim NPM : 202510715211 Kelas : F2A1 ​Penjelasan ​Program ini dibuat untuk menyelesaikan permasalahan dalam menemukan jalur terpendek atau langkah minimum untuk keluar dari sebuah labirin (maze). Input program berupa matriks dua dimensi yang merepresentasikan peta labirin, di mana terdapat titik awal (mulai), jalan yang bisa dilewati, dinding/penghalang, dan titik keluar. Program akan menganalisis rute menggunakan algoritma pencarian jalur untuk menemukan jalan keluar yang paling efektif. ​Hasil akhir akan ditampilkan dalam format: s#i: x ​Dimana: ​i adalah nomor kasus atau baris input peta ​x adalah jumlah langkah minimum yang dibutuhkan untuk mencapai jalan keluar (atau -1 jika tidak ada jalan keluar) ​Tujuan ​Tujuan dari program ini adalah untuk memahami konsep representasi graf atau matriks dalam pemrograman, mempelajari implementasi algoritma pencarian seperti Breadth-First Search (BFS) untuk pencarian jalur terpendek, serta mengasah logika pemecahan masalah kompleks menggunakan Python. ​Bahasa yang Digunakan ​Python from collections import deque def cari_jalan_keluar(): print("Masukkan labirin berbentuk matriks (misal 0 untuk jalan, 1 untuk dinding).") print("Gunakan 'S' untuk Start dan 'E' untuk Exit.") print("Ketik 'exit' setelah memasukkan labirin untuk memproses.\n") kasus_ke = 1 while True: print(f"--- Input Kasus #{kasus_ke} ---") labirin = [] # Membaca input labirin baris demi baris hingga user mengetik 'done' atau 'exit' while True: baris_input = input("Masukkan baris (atau ketik 'done'/'exit' jika selesai): ").strip() if baris_input.lower() == 'exit': print("Program selesai. Terima kasih!") return if baris_input.lower() == 'done': break if baris_input: # Mengubah input string menjadi list karakter labirin.append(baris_input.split()) if not labirin: print("Labirin kosong, silakan masukkan data kembali.\n") continue # Mencari koordinat Start (S) dan Exit (E) start = None exit_pos = None baris_maks = len(labirin) kolom_maks = len(labirin[0]) for r in range(baris_maks): for c in range(kolom_maks): if labirin[r][c] == 'S': start = (r, c) elif labirin[r][c] == 'E': exit_pos = (r, c) if not start or not exit_pos: print("Error: Karakter 'S' (Start) atau 'E' (Exit) tidak ditemukan!\n") continue # --- Algoritma BFS untuk mencari jalur terpendek --- queue = deque([(start[0], start[1], 0)]) # Menyimpan data: (baris, kolom, jumlah_langkah) dikunjungi = set([start]) langkah_minimum = -1 # Arah gerakan: Atas, Bawah, Kiri, Kanan arah = [(-1, 0), (1, 0), (0, -1), (0, 1)] while queue: r, c, langkah = queue.popleft() # Jika sudah sampai di titik Exit (E) if (r, c) == exit_pos: langkah_minimum = langkah break # Cek ke 4 arah gerakan for dr, dc in arah: nr, nc = r + dr, c + dc # Pastikan koordinat baru tidak keluar dari batas labirin if 0 <= nr < baris_maks and 0 <= nc < kolom_maks: # Pastikan belum pernah dikunjungi dan BUKAN dinding ('1') if (nr, nc) not in dikunjungi and labirin[nr][nc] != '1': dikunjungi.add((nr, nc)) queue.append((nr, nc, langkah + 1)) # Menampilkan hasil sesuai format s#i: x print(f"\ns#{kasus_ke}: {langkah_minimum}\n") kasus_ke += 1 # Menjalankan program if __name__ == "__main__": cari_jalan_keluar()