Graph Traversal in Data Structure
There are two standard ways to traverse a graph.
1. Breadth-First Search (BFS)
2. Depth-First Search (DFS)
Breadth-First Search (BFS):
In this traversal technique, at first select a vertex S to start the traversal. Initially set the colour of all the vertices to WHITE. Insert S into the queue and change its colour to BLACK as now S is a visited vertex. Now delete the front node N from the queue. Visit all the adjacent vertices of N and insert to queue those neighbours of N that have the colour WHITE. Change their colours to BLACK. Continue this procedure until the queue is empty.
Breadth-First Search Algorithm:
Algorithm fnBFS(S) { for(all the vertices j of the graph) color[j]=WHITE; fnInsert(S); Color[S]=BLACK; while(queue is not empty) { N=fnDelete(); for(each adjacent vertex j of N) if(Color[j]==WHITE) { fnInsert(j); Color[j]=BLACK; } } } // End of Algorithm
Time Complexity of Breadth-First Search Algorithm:
If we represent the graph using an adjacency list, then we have to traverse each edge at most twice(for an undirected graph). Hence time complexity is O(e) where e is the total number of edges.
If we represent the graph using an adjacency matrix, then we have to check n entries in the matrix for each vertex to find its adjacent vertices. As there are total n vertices, so time complexity is O(n2).
Depth-First Search (DFS):
In this traversal technique, we use a stack instead of queue. Like the BFS traversal, initially set the colour of all the vertices to WHITE. Insert starting vertex S into the stack and change its colour to BLACK. Now delete the top node N from the stack. Visit all the adjacent vertices of N and insert to stack those neighbours of N that have the colour WHITE. Change their colours to BLACK. Continue this procedure until the stack is empty.
Depth-First Search Algorithm:
Algorithm fnDFS(S) { for(all the vertices j of the graph) Color[j]=WHITE; fnPush(S); Color[S]=BLACK; while(stack is not empty) { N=fnPop(); for(each adjacent vertex j of N) if(Color[j]==WHITE) { fnPush(j); Color[j]=BLACK; } } } // End of Algorithm