Tutorialspoint.dev

BFS using STL for competitive coding

A STL based simple implementation of BFS using queue and vector in STL. The adjacency list is represented using vectors of vector.

In BFS, we start with a node.
1) Create a queue and enqueue source into it. 
   Mark source as visited.
2) While queue is not empty, do following
    a) Dequeue a vertex from queue. Let this 
       be f.
    b) Print f
    c) Enqueue all not yet visited adjacent
       of f and mark them visited.

Below is an example BFS starting from source vertex 1. Note that there can be multple BFSs possible for a graph (even from a particular vertex).

For more details of BFS, refer this post .

The code here is simplified such that it could be used in competitive coding.

// A Quick implementation of BFS using
// vectors and queue
#include <bits/stdc++.h>
#define pb push_back
  
using namespace std;
  
vector<bool> v;
vector<vector<int> > g;
  
void edge(int a, int b)
{
    g[a].pb(b);
  
    // for undirected graph add this line
    // g[b].pb(a);
}
  
void bfs(int u)
{
    queue<int> q;
  
    q.push(u);
    v[u] = true;
  
    while (!q.empty()) {
  
        int f = q.front();
        q.pop();
  
        cout << f << " ";
  
        // Enqueue all adjacent of f and mark them visited 
        for (auto i = g[f].begin(); i != g[f].end(); i++) {
            if (!v[*i]) {
                q.push(*i);
                v[*i] = true;
            }
        }
    }
}
  
// Driver code
int main()
{
    int n, e;
    cin >> n >> e;
  
    v.assign(n, false);
    g.assign(n, vector<int>());
  
    int a, b;
    for (int i = 0; i < e; i++) {
        cin >> a >> b;
        edge(a, b);
    }
  
    for (int i = 0; i < n; i++) {
        if (!v[i])
            bfs(i);
    }
  
    return 0;
}

Input:
8 10
0 1
0 2
0 3
0 4
1 5
2 5
3 6
4 6
5 7
6 7

Output:
0 1 2 3 4 5 6 7

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



This article is attributed to GeeksforGeeks.org

leave a comment

code

1 Comments

load comments

Subscribe to Our Newsletter