Metode Penelusuran
•
Graph Traversal : Mengunjungi tiap
simpul/node secara sistematik.
•
Metode :
–
DFS (Depth First Search) : Pencarian
Mendalam
–
BFS (Breadth First Search) : Pencarian
Algoritma BFS
•
BFS diawali dengan vertex yang
diberikan, yang mana di level 0. Dalam
stage pertama, kita kunjungi semua
vertex di level 1. Stage kedua, kita
kunjungi semua vertex di level 2. Disini
vertex baru, yang mana adjacent ke
vertex level 1, dan seterusnya.
Breadth First Search (BFS)
Breadth First Search (BFS)
….
Algoritma BFS
•
Traversal dimulai dari simpul v.
•
Algoritma:
1. Kunjungi simpul
v,
2. Kunjungi semua simpul yang bertetangga
dengan simpul
v
terlebih dahulu
.
Depth First Search (DFS)
•
Pada setiap pencabangan, penelusuran
verteks-verteks yang belum dikunjungi
dilakukan secara lengkap pada
pencabangan pertama, kemudian
Depth First Search (DFS)
Depth First Search (DFS)
….
Algoritma DFS
•
Traversal dimulai dari simpul
v.
•
Algoritma:
1. Kunjungi simpul
v,
2. Kunjungi simpul
w
yang bertetangga dengan
simpul
v.
3. Ulangi
DFS mulai dari simpul w.
4. Ketika mencapai simpul
u sedemikian sehingga
semua simpul yang bertetangga dengannya
telah dikunjungi, pencarian dirunut-balik
(
backtrack)
ke simpul terakhir yang dikunjungi
sebelumnya dan mempunyai simpul
w yang
belum
dikunjungi.
Latihan
•
Telusuri graph disamping dengan
mengunakan BFS dan DFS. Secara
berturut-urut root dimulai dari 1,2,3
dan 4.
Latihan
2. Telusuri dengan BFS dan DFS!
root : node 1
2
3
8 1
4
5
9
6
Latihan
3. Telusuri dengan BFS dan DFS!
root : node 1
Operasi-operasi
Menggunakan adjacency matriks,
operasi-operasinya sebagai berikut :
1. Deklarasi
2. Inisialisasi
3. Penambahan node
4. Penambahan edge
5. Menandai Node
6. Traversal
Contoh Program
•
Deklarasi
public class AdjacencyMatriksGraph {
private final int MAX_VERTS = 20;
private Vertex vertexList[];
private int adjMat[][];
private int nVerts;
Contoh Program
•
Inisialisasi
public AdjacencyMatriksGraph() // constructor {
vertexList = new Vertex[MAX_VERTS]; // adjacency matrix
adjMat = new int[MAX_VERTS][MAX_VERTS]; nVerts = 0;
for(int j=0; j<MAX_VERTS; j++) // set adjacency for(int k=0; k<MAX_VERTS; k++) // matrix to 0 adjMat[j][k] = 0;
Contoh Program
•
Tambah Node
public void addVertex(char lab)
{
Contoh Program
•
Tambah Edge
public void addEdge(int start, int end)
{
Contoh Program
•
Menandai Node
public int getAdjUnvisitedVertex(int v) {
for(int j=0; j<nVerts; j++)
if(adjMat[v][j]==1 && vertexList[j].wasVisited==false) return j;
•
DFS
public void dfs() // depth-first search { // begin at vertex 0
vertexList[0].wasVisited = true; // mark it displayVertex(0); // display it
theStack.push(0); // push it
while( !theStack.isEmpty() ) // until stack empty, {
int v = getAdjUnvisitedVertex( theStack.peek() ); if(v == -1) // if no such vertex,
theStack.pop();
else // if it exists, {
vertexList[v].wasVisited = true; displayVertex(v); // display it theStack.push(v); // push it }
} // end while
for(int j=0; j<nVerts; j++) // reset flags vertexList[j].wasVisited = false;
•
BFS
public void bfs() // breadth-first search { // begin at vertex 0
vertexList[0].wasVisited = true; // mark it displayVertex(0); // display it
theQueue.insert(0); // insert at tail int v2;
while( !theQueue.isEmpty() ) {
int v1 = theQueue.remove();
// until it has no unvisited neighbors
while( (v2=getAdjUnvisitedVertex(v1)) != -1 ) { // get one,
vertexList[v2].wasVisited = true; // mark it displayVertex(v2); // display it
theQueue.insert(v2); // insert it } // end while
} // end while(queue not empty) // queue is empty, so we're done
for(int j=0; j<nVerts; j++) // reset flags vertexList[j].wasVisited = false;
Contoh Program
•
Display Node
public void displayVertex(int v)
{