My first Magazine pemrograman-kompetitif-dasar | Page 111
9.6 Contoh Permasalahan Graf
1. Awalnya, seluruh node dianggap belum pernah dikunjungi.
2. Pilih salah satu node yang belum pernah dikunjungi, lalu lakukan penelusuran mulai dari
node tersebut. Seluruh node yang dilalui pada penelusuran ini dianggap telah dikunjungi.
3. Apabila masih ada node yang belum pernah dikunjungi, lakukan langkah ke-2. Apabila
seluruh node telah dikunjungi, laporkan banyaknya penelusuran graf yang dilakukan sebagai
jawaban dari persoalan ini.
Urutan pengunjungan node tidaklah penting, sehingga penelusuran graf yang digunakan
dapat berupa DFS atau BFS. Algoritma 47 menggunakan DFS yang diimplementasikan secara
rekursif sebagai penelusuran grafnya.
Algoritma 47 Solusi Persebaran Informasi menggunakan DFS.
1: visited ← new boolean[MAX_N]
2: procedure DFS(curNode)
visited[curNode] ← true
for ad jNode ∈ ad j(curNode) do
if not visited[ad jNode] then
DFS(ad jNode)
end if
end for
end procedure
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function SOLVE ()
FILL A RRAY (visited, f alse)
result ← 0
for i ← 1, N do
if not visited[i] then
DFS(i)
result ← result + 1
end if
end for
return result
end function
. Fungsi utama yang mengembalikan jawaban soal
Permasalahan semacam ini biasa disebut dengan menghitung banyaknya komponen. Sebuah
komponen pada graf tidak berbobot merupakan sekumpulan node yang dapat saling mengunjungi
satu sama lain, tanpa ada node lain pada graf yang dapat dimasukkan pada kumpulan node ini.
Dalam sebuah graf, mungkin saja terdapat beberapa komponen.
II Sekilas Info JJ
Algoritma penelusuran graf untuk mengunjungi seluruh node pada suatu komponen umum-
nya disebut dengan flood fill . Secara harfiah, flood fill berarti "pengisian banjir". Nama
ini sesuai dengan jalannya algoritma yang seperti air banjir mengalir dari suatu node ke
node lainnya yang bertetangga. Pada Algoritma 47, flood fill ditunjukkan pada baris ke-2
sampai dengan baris ke-9.
101