My first Magazine pemrograman-kompetitif-dasar | Page 134

11 Algoritma Graf Algoritma 62 Implementasi algoritma Dijkstra. 1: 2: 3: 4: 5: 6: 7: function D IJKSTRA (s) dist ← new integer[V + 1] visited ← new boolean[V + 1] pred ← new integer[V + 1] FILL A RRAY (dist, ∞) FILL A RRAY (visited, f alse) FILL A RRAY (pred, −1) 8: dist[s] ← 0 while true do . Perulangan ini akan diakhiri dengan break u ← −1 minDist ← ∞ for i ← 1, V do . Cari node yang belum dikunjungi dan memiliki dist terkecil if (not visited[i]) ∧ (dist[i] < minDist) then u ← i minDist ← dist[i] end if end for if (u = −1) ∨ IS I NFINITE (dist[u]) then break . Akhiri perulangan while end if 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: visited[u] ← true for v ∈ ad j(u) do if dist[v] > dist[u] + w[u][v] then dist[v] = dist[u] + w[u][v] pred[v] = u end if end for end while 22: 23: 24: 25: 26: 27: 28: return dist 30: end function 29: . Lakukan relax untuk semua tetangga u . Kembalikan tabel shortest path yang bermula dari s Untuk mencetak edge -edge yang perlu dilalui untuk mencapai suatu node x dari node permulaan (yaitu s), cukup lakukan penelusuran dari x ke belakang menggunakan informasi pred[x] sampai mencapai s. Algoritma pencariannya ditunjukkan pada Algoritma 63. Waspadai bahwa belum tentu semua node x dapat dikunjungi dari s. Ketika hal ini terjadi, pred[x] masih tetap bernilai −1. Algoritma 63 Mencetak edge -edge yang dilalui untuk mencapai node x. 1: 2: 3: 4: 5: 6: 7: 8: procedure PRINT P ATH (x) if (pred[x] = −1) ∧ (x 6 = s) then print "Tidak ada jalan" else if pred[x] 6 = −1 then PRINT P ATH (pred[x]) print pred[x], x end if end procedure 124