BFS using STL for competitive coding
Last Updated :
25 Jan, 2023
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.
- Create a queue and enqueue source into it.
- Mark source as visited.
- While queue is not empty, do following
- Dequeue a vertex from queue. Let this be f.
- Print f
- 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 multiple 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.
Implementation:
CPP
#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);
}
void bfs( int u)
{
queue< int > q;
q.push(u);
v[u] = true ;
while (!q.empty()) {
int f = q.front();
q.pop();
cout << f << " " ;
for ( auto i = g[f].begin(); i != g[f].end(); i++) {
if (!v[*i]) {
q.push(*i);
v[*i] = true ;
}
}
}
}
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
Time Complexity: O(V+E) – we traverse all vertices at least once and check every edge.
Auxiliary Space: O(V) – for using a queue to store vertices.
Share your thoughts in the comments
Please Login to comment...