/*
ALGORITHM
Enqueue the root node
Dequeue a node and examine it
If the element sought is found in this node, quit the search and return a result.
Otherwise enqueue any successors (the direct child nodes) that have not yet been discovered.
If the queue is empty, every node on the graph has been examined – quit the search and return "not found".
If the queue is not empty, repeat from Step 2.
COMPLEXITY
BFS is very first and runs in linear time O(|V| + |E|) since each vertex and edge is explored once in worst case.
APPLICATIONS
Finding shortest path between 2 nodes in an undirected graph.
Checking if a graph is bipartite
Ford Fulkerson method for computing maximum flow in a network.
Serialization/Deserialization of a binary tree.
Finding all nodes within one connected components.
*/
public void BFS(int sourceVertex) {
System.out.println("BFS Traversal");
int i,targetId;
ArrayList<Vertex> queue = new ArrayList<>();
boolean visited[] = new boolean[totalVertices];
//Put all the vertices to unexplored set of vertices, initially.
for(i=0; i<totalVertices; i++)
visited[i] = false;
//Put source vertex to explored vertices set.
visited[sourceVertex] = true;
queue.add(vertices[sourceVertex]);
while(!queue.isEmpty()) {
//Remove the very first vertex from the queue.
Vertex vertex = queue.get(0);
queue.remove(0);
//Process the removed vertex.
System.out.println(vertex.vertexId);
for(i=0; i<vertex.edges.size(); i++) {
//Get all the vertices reachable from processed vertex and add them to queue.
//put the processed vertex to explored set of vertices, so that its not explored again.
targetId = vertex.edges.get(i).Target.vertexId;
if(!visited[targetId]) {
queue.add(vertex.edges.get(i).Target);
visited[targetId] = true;
}
}
}
}
Friday, 4 October 2013
Breadth First Search in a Graph.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment