Quiz Comment Box

Sorts

Breadth First Search (BFS)

BFS explores graph moving across to all the neighbors of last visited vertex traversals i.e., it proceeds in a concentric manner by visiting all the vertices that are adjacent to a starting vertex, then all unvisited vertices two edges apart from it and so on, until all the vertices in the same connected component as the starting vertex are visited. Instead of a stack, BFS uses queue.

Example :

Algorithm - Breadth first search

                       
 Algorithm BFS(G)
 
 Algorithm BFS(G) //Implements a breadth-first search traversal of a given graph 
//Input: Graph G = (V, E) 
//Output: Graph G with its vertices marked with consecutive integers in the order they have been visited by the BFS traversal 
    
      { 
mark each vertex with 0 as a mark of being “unvisited” 
count ←0 
for each vertex v in V 
do 
{ 
        if v is marked with 0 bfs(v) 
} 
}                                                      
                             
                

Following are the implementation of BFS into programs

                        
   #include
void BFS(int a[20][20],int source,int visited[20],int n)
{
    int queue[20],f,r,u,v;
    f=0;
    r=-1;
    queue[++r]=source;
    while(f<=r)
    {
        u=queue[f++];
        for(v=1; v<=n; v++)
        {
        if(a[u][v]==1 && visited[v]==0)
        {
           queue[++r]=v;
           visited[v]=1;
        }
        }
    }
}

void main( )
{
    int n,a[20][20],i,j,visited[20],source;
    clrscr( );

    printf("Enter the number ofvertices:");
    scanf("%d",&n);

    printf("\nEnter the adjacency matrix:\n");
    for(i=1; i<=n; i++)
       for(j=1; j<=n; j++)
           scanf("%d",&a[i][j]);

    for(i=1; i<=n; i++)
       visited[i]=0;

    printf("\nEnter the source node:");
    scanf("%d",&source);

    visited[source]=1;

    BFS(a,source,visited,n);

    for(i=1; i<=n; i++)
    {
       if(visited[i]!=0)
          printf("\n Node %d is reachable",i);
       else
          printf("\n Node %d is not reachable",i);
    }
    getch();
}
                               
                        
                         Code 
                    
                        
    // Java program to print BFS traversal from a given source vertex.
// BFS(int s) traverses vertices reachable from s.

import java.io.*;
import java.util.*;

// This class represents a directed graph using adjacency list
// representation
class Graph
{
    private int V; // No. of vertices
    private LinkedList adj[]; //Adjacency Lists

    // Constructor
    Graph(int v)
    {
        V = v;
        adj = new LinkedList[v];
        for (int i=0; i queue = new LinkedList();

        // Mark the current node as visited and enqueue it
        visited[s]=true;
        queue.add(s);

        while (queue.size() != 0)
        {
            // Dequeue a vertex from queue and print it
            s = queue.poll();
            System.out.print(s+" ");

            // Get all adjacent vertices of the dequeued vertex s
            // If a adjacent has not been visited, then mark it
            // visited and enqueue it
            Iterator i = adj[s].listIterator();
            while (i.hasNext())
            {
                int n = i.next();
                if (!visited[n])
                {
                    visited[n] = true;
                    queue.add(n);
                }
            }
        }
    }

    // Driver method to
    public static void main(String args[])
    {
        Graph g = new Graph(4);

        g.addEdge(0, 1);
        g.addEdge(0, 2);
        g.addEdge(1, 2);
        g.addEdge(2, 0);
        g.addEdge(2, 3);
        g.addEdge(3, 3);

        System.out.println("Following is Breadth First Traversal "+
                        "(starting from vertex 2)");

        g.BFS(2);
    }
}

                        
                         Code 
                    
                        
   # Python3 Program to print BFS traversal
# from a given source vertex. BFS(int s)
# traverses vertices reachable from s.
from collections import defaultdict

# This class represents a directed graph
# using adjacency list representation
class Graph:

    # Constructor
    def __init__(self):

        # default dictionary to store graph
        self.graph = defaultdict(list)

    # function to add an edge to graph
    def addEdge(self,u,v):
        self.graph[u].append(v)

    # Function to print a BFS of graph
    def BFS(self, s):

        # Mark all the vertices as not visited
        visited = [False] * (max(self.graph) + 1)

        # Create a queue for BFS
        queue = []

        # Mark the source node as
        # visited and enqueue it
        queue.append(s)
        visited[s] = True

        while queue:

            # Dequeue a vertex from
            # queue and print it
            s = queue.pop(0)
            print (s, end = " ")

            # Get all adjacent vertices of the
            # dequeued vertex s. If a adjacent
            # has not been visited, then mark it
            # visited and enqueue it
            for i in self.graph[s]:
                if visited[i] == False:
                    queue.append(i)
                    visited[i] = True

# Driver code

# Create a graph given in
# the above diagram
g = Graph()
g.addEdge(0, 1)
g.addEdge(0, 2)
g.addEdge(1, 2)
g.addEdge(2, 0)
g.addEdge(2, 3)
g.addEdge(3, 3)

print ("Following is Breadth First Traversal"
                " (starting from vertex 2)")
g.BFS(2)
                        
                         Code 
                    

Sample Output

Following is Breadth First Traversal (starting from vertex 2) 2 0 3 1

Time Complexity

Note: The time complexity of the breadth-first search algorithm : The time complexity of the breadth-first search algorithm can be stated as O(|V|+|E|) because, in the worst case, it will explore every vertex and edge. The number of vertices in the graph is |V|, while the edges are |E|.

Visualized

Note: For better Visualized Understanding visit our algorithm Visualizer

Visualize
previous

Quick sort