Modul 3 (Graph Traversal) - Algoritma-dan-Pemrograman-ITS/StrukturData GitHub Wiki
Sesuai dengan namanya, DFS akan melakukan traversal sampai ke vertex yang paling 'dalam'. Setiap kali sampai di suatu vertex
Contoh pengimplementasian dalam weighted graf dapat dilakukan secara iteratif seperti kode berikut:
void dfs(vector<long> &result, long start){
vector<bool> visited(vertex, false);
stack<long> st;
st.push(start);
visited[start] = true;
result.push_back(start);
while(!st.empty()){
long temp = st.top();
st.pop();
if(!visited[temp]){
result.push_back(temp);
visited[temp] = true;
}
for(auto it:adjList[temp]){
if (!visited[it.first])
st.push(it.first);
}
}
}
Traversal menggunakan BFS dimulai dari sebuah vertex, lalu akan mengunjungi vertex yang terhubung langsung dengan vertex tersebut (layer 1). Lalu, di langkah selanjutnya akan mengunjungi vertex yang terhubung langsung dengan vertex - vertex pada layer 1 (layer 2) dan seterusnya sampai sudah tidak ada lagi vertex yang bisa dikunjungi.
Berbeda dengan DFS, pengimplementasian BFS dapat dilakukan secara iteratif dengan menggunakan bantuan queue
seperti berikut :
void bfs(vector<long> &result, long start){
vector<bool> visited(vertex, false);
queue<long> q;
q.push(start);
visited[start] = true;
result.push_back(start);
while(!q.empty()){
long temp = q.front();
q.pop();
for(auto it:adjList[temp]){
if (!visited[it.first]){
q.push(it.first);
visited[it.first] = true;
result.push_back(it.first);
}
}
}
}
Trivia question : pada DFS, kita melakukan penandaan pada node sebelum mengiterasi isi dari adjacency list, sedangkan pada BFS, kita melakukan penandaan di dalam iterasi. Apakah timing penempatan tanda ini berpengaruh pada algoritma-algoritma tersebut? Jika iya, apa pengaruhnya?
Jika kita melakukan BFS pada graf tersebut dari vertex 1, maka vertex-vertex tiap layer adalah:
- Layer 0 : 1
- Layer 1 : 2 5
- Layer 2 : 3 4
- Layer 3 : 6
Perhatikan bahwa jumlah layer adalah jumlah dari edge minimal yang harus dilewati untuk sampai ke vertex tersebut dari vertex 1 atau biasa disebut dengan shortest path.