My first Magazine pemrograman-kompetitif-dasar | Page 131
11.1 Shortest Path
• visited[x]: bernilai true apabila suatu node x telah dikunjungi.
Sebagai tambahan, kita juga dapat mencatat node mana yang dikunjungi sebelum mencapai
suatu node x pada shortest path . Kita nyatakan node tersebut sebagai pred[x]. Informasi ini
diperlukan apabila Anda membutuhkan edge -edge mana yang perlu digunakan pada shortest
path .
II Sekilas Info JJ
Apabila soal yang dihadapi tidak membutuhkan informasi edge -edge yang perlu diguna-
kan pada shortest path , Anda dapat menghemat waktu dan pengetikan kode dengan
mengabaikan pred[x].
Pada awalnya, seluruh node x memiliki nilai dist[x] = ∞, dan visited[x] = f alse. Khusus untuk
node s, kita mengetahui bahwa jarak terpendek untuk mencapai s dari s sendiri adalah 0. Oleh
sebab itu, dist[s] = 0. Seluruh nilai pred[x] bisa kita isi −1, sebab tidak diketahui node mana yang
dikunjungi sebelum x.
Setelah inisialisasi selesai dilakukan, jalankan langkah-langkah berikut:
1. Pilih sebuah node yang belum dikunjungi dan memiliki dist terkecil. Sebut saja node ini
sebagai u.
2. Apabila tidak ada lagi node yang belum dikunjungi, atau dist[u] bernilai ∞, artinya tidak ada
lagi node yang dapat dikunjungi. Algoritma Dijkstra berakhir.
3. Karena u dikunjungi, maka set visited[u] = true. Kini dipastikan shortest path dari s menuju
u adalah dist[u]. Diketahui pula edge hpred[u], ui merupakan edge yang perlu digunakan
pada shortest path ke u.
4. Untuk setiap node v yang merupakan tetangga dari u, lakukan sebuah proses yang disebut
"relax ". Proses relax untuk node u dan v adalah proses untuk memperbaharui jarak
terpendek mencapai v, apabila ternyata mencapai v melalui u membutuhkan jarak yang lebih
kecil. Dengan kata lain, dilakukan:
dist[v] = min(dist[v], dist[u] + w[u][v])
Setiap kali dist[v] mengalami perubahan, ubah nilai pred[v] menjadi u. Sebab sejauh ini
diketahui bahwa untuk mencapai v pada shortest path , node sebelumnya adalah u.
5. Kembali ke langkah 1.
Mari kita simulasikan Dijkstra pada graf berbobot dan tidak berarah yang ditunjukkan pada
Gambar 11.1. Misalnya node permulaan adalah 1, sehingga kita hendak mencari shortest path
dari 1 ke semua node lainnya. Gambar 11.2 sampai Gambar 11.7 menunjukkan simulasi Dijkstra
pada graf tersebut.
2
2
1
5
6
3
3
1
5
2
4
Gambar 11.1: Graf berbobot dan tidak berarah.
121