Implementasi Algoritma Depth First Search
Implementasi Algoritma Depth First Search
Berdasarkan teori DFS, yang dicari berawal simpul terdalam / paling awal terlebih dahulu. Setelah itu
merambat satu-persatu ke simpul paling ujung. Jadi model pnecariannya adalah menurun. Berbeda dengan
BFS yang alur pencariannya menyamping. Alur pencarian pada struktur diatas adalah sebagai berikut:
Periksa bawahan Agus yang pertama, namanya Novan, setelah dicek, Novan punya dua bawahan juga.
Periksa bawahan Novan yang pertama, namanya Syauqil, setelah dicek, Syauqil adalah posisi paling
bawah / ujung.
Periksa bawahan Novan yang kedua, namanya Aji, setelah dicek, dia juga ada di posisi paling bawah
sekaligus yang terakhir.
Berikutnya periksa bawahan Agus yang kedua, namanya Budi, setelah dicek, ternyata dia punya tiga
bawahan.
Bawahan Budi yang pertama adalah Wildan dan dia tidak punya bawahan lagi (posisi paling bawah).
Bawahan Budi yang kedua adalah Ni'am dan dia juga ada di posisi paling bawah.
Bawahan Budi yang ketiga adalah Bayu dan dia juga di posisi paling bawah sekaligus akhir dari
pencarian.
Script di bawah ini adalah contoh dari DFS yang dibuat dengan PHP. Data yang dipakai adalah data array yang
sudah diatur seperti struktur jabatan. Data array ini juga bisa digantikan dengan database. Berikut hasil dari
script di bawah ini:
1.
<?php
2.
/*
3.
/\
4.
* 2 3___
5.
* /\ |\\
6.
*4 56 78
7.
8.
*/
9.
10.
$ar[1]['parent']=0;
11.
$ar[1]['value']=1;
12.
$ar[1]['nama']='Agus';
13.
$ar[1]['posisi']='Ketua';
14.
15.
$ar[2]['parent']=1;
16.
$ar[2]['value']=2;
17.
$ar[2]['nama']='Novan';
18.
$ar[2]['posisi']='Wakil 1';
19.
20.
$ar[3]['parent']=1;
21.
$ar[3]['value']=3;
22.
$ar[3]['nama']='Budi';
23.
$ar[3]['posisi']='Wakil 2';
24.
25.
$ar[4]['parent']=2;
26.
$ar[4]['value']=4;
27.
$ar[4]['nama']='Syauqil';
28.
$ar[4]['posisi']='Anggota';
29.
30.
$ar[5]['parent']=2;
31.
$ar[5]['value']=5;
32.
$ar[5]['nama']='Aji';
33.
$ar[5]['posisi']='Anggota';
34.
35.
$ar[6]['parent']=3;
36.
$ar[6]['value']=6;
37.
$ar[6]['nama']='Wildan';
38.
$ar[6]['posisi']='Anggota';
39.
40.
$ar[7]['parent']=3;
41.
$ar[7]['value']=7;
42.
$ar[7]['nama']='Ni\'am';
43.
$ar[7]['posisi']='Anggota';
44.
45.
$ar[8]['parent']=3;
46.
$ar[8]['value']=8;
47.
$ar[8]['nama']='Bayu';
48.
$ar[8]['posisi']='Anggota';
49.
50.
function dfs($arr,$parent,$base){
51.
global $explc;
52.
global $explv;
53.
$explc++;
54.
55.
56.
if($parent==0){
57.
$explv[$explc]['parent'] = $arr[$a-1]['parent'];
58.
$explv[$explc]['value'] = $arr[$a-1]['value'];
59.
$explv[$explc]['nama'] = $arr[$a-1]['nama'];
60.
$explv[$explc]['posisi'] = $arr[$a-1]['posisi'];
61.
62.
$explv[$explc]['base'] = $base;
63.
64.
if($arr[$a]['parent']==$parent){
65.
$explv[$explc]['parent'] = $arr[$a]['parent'];
66.
$explv[$explc]['value'] = $arr[$a]['value'];
67.
$explv[$explc]['nama'] = $arr[$a]['nama'];
68.
$explv[$explc]['posisi'] = $arr[$a]['posisi'];
69.
70.
$explv[$explc]['base'] = $base;
71.
$base++;
72.
dfs($arr,$arr[$a]['value'],$base);
73.
$base--;
74.
75.
76.
77.
78.
function menjorok($jumlah,$tanda){
79.
80.
81.
82.
echo "\n";
83.
global $explv,$explc;
84.
$explc = -1;
85.
dfs($ar,0,0);
86.
87.
88.
89.
unset($explc);
90.
unset($explv);
91.
?>