Add Tugas 2

This commit is contained in:
202510715211 MUHAMMAD LUKMAN NURHAKIM 2026-07-07 11:28:54 +07:00
parent 1e71727b18
commit 52185f121f

97
Tugas 2 Normal file
View File

@ -0,0 +1,97 @@
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()