#include<bits/stdc++.h>
using namespace std;
vector< vector< int > > G( 101 ) ;
vector< int > dis( 101 , - 1 ) ;
vector< int > color( 101 , - 1 ) ;
void inputList( int n, int e) ;
void BFS( int s) ;
void printDistance( int n) ;
int main( )
{
int nodes, edges, i, source;
cout << "Enter total number of nodes and edges:" << endl;
cin >> nodes>> edges;
inputList( nodes, edges) ;
cout << "Enter source: " ;
cin >> source;
cout << "Distance of each node before BFS" << endl;
printDistance( nodes) ;
BFS( source) ; ///----
cout << "Distance of each node After BFS" << endl;
printDistance( nodes) ;
}
void inputList( int n, int e)
{
int i, u, v;
cout << "Enter the edges:" << endl;
for ( i= 0 ; i< e; i++ ) {
cin >> u>> v;
G[ u] .push_back ( v) ;
G[ v] .push_back ( u) ;
}
cout << "Input Complete....." << endl;
}
void BFS( int s)
{
int u, v, i;
queue< int > Q;
Q.push ( s) ; /// enqueue source node
color[ s] = 0 ;
dis[ s] = 0 ;
while ( ! Q.empty ( ) )
{
u = Q.front ( ) ;
Q.pop ( ) ;
color[ u] = 1 ;
for ( i= 0 ; i< G[ u] .size ( ) ; i++ ) {
v = G[ u] [ i] ;
if ( color[ v] == - 1 ) {
Q.push ( v) ;
color[ v] = 0 ;
dis[ v] = dis[ u] + 1 ;
}
}
}
}
void printDistance( int n)
{
for ( int i = 1 ; i<= n; i++ ) {
cout << "Distance of node " << i<< " is " << dis[ i] << endl;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp2ZWN0b3I8IHZlY3RvcjxpbnQ+ID4gRygxMDEpOwp2ZWN0b3I8aW50PiBkaXMoMTAxLCAtMSk7CnZlY3RvcjxpbnQ+IGNvbG9yKDEwMSwgLTEpOwogCnZvaWQgaW5wdXRMaXN0KGludCBuLCBpbnQgZSk7CnZvaWQgQkZTKGludCBzKTsKdm9pZCBwcmludERpc3RhbmNlKGludCBuKTsKIAppbnQgbWFpbigpCnsKICAgIGludCBub2RlcywgZWRnZXMsIGksIHNvdXJjZTsKICAgIGNvdXQ8PCJFbnRlciB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgYW5kIGVkZ2VzOiI8PGVuZGw7CiAgICBjaW4+Pm5vZGVzPj5lZGdlczsKICAgIGlucHV0TGlzdChub2RlcywgZWRnZXMpOwogICAgY291dDw8IkVudGVyIHNvdXJjZTogIjsKICAgIGNpbj4+IHNvdXJjZTsKICAgIGNvdXQ8PCJEaXN0YW5jZSBvZiBlYWNoIG5vZGUgYmVmb3JlIEJGUyI8PGVuZGw7CiAgICBwcmludERpc3RhbmNlKG5vZGVzKTsKICAgIEJGUyhzb3VyY2UpOyAvLy8tLS0tCiAgICBjb3V0PDwiRGlzdGFuY2Ugb2YgZWFjaCBub2RlIEFmdGVyIEJGUyI8PGVuZGw7CiAgICBwcmludERpc3RhbmNlKG5vZGVzKTsKIAp9CnZvaWQgaW5wdXRMaXN0KGludCBuLCBpbnQgZSkKewogICAgaW50IGksIHUsIHY7CiAgICBjb3V0PDwiRW50ZXIgdGhlIGVkZ2VzOiI8PGVuZGw7CiAgICBmb3IoaT0wOyBpPGU7IGkrKyl7CiAgICAgICAgY2luPj51Pj52OwogICAgICAgIEdbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIEdbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgY291dDw8IklucHV0IENvbXBsZXRlLi4uLi4iPDxlbmRsOwp9CnZvaWQgQkZTKGludCBzKQp7CiAgICBpbnQgdSwgdiwgaTsKICAgIHF1ZXVlPGludD4gUTsKICAgIFEucHVzaChzKTsgLy8vIGVucXVldWUgc291cmNlIG5vZGUKICAgIGNvbG9yW3NdID0gMDsKICAgIGRpc1tzXSA9IDA7CiAgICB3aGlsZSghUS5lbXB0eSgpKQogICAgewogICAgICAgIHUgPSBRLmZyb250KCk7CiAgICAgICAgUS5wb3AoKTsKICAgICAgICBjb2xvclt1XT0xOwogICAgICAgIGZvcihpPTA7IGk8R1t1XS5zaXplKCk7IGkrKyl7CiAgICAgICAgICAgIHYgPSBHW3VdW2ldOwogICAgICAgICAgICBpZihjb2xvclt2XT09LTEpewogICAgICAgICAgICAgICAgUS5wdXNoKHYpOwogICAgICAgICAgICAgICAgY29sb3Jbdl09MDsKICAgICAgICAgICAgICAgIGRpc1t2XSA9IGRpc1t1XSsxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CiAKdm9pZCBwcmludERpc3RhbmNlKGludCBuKQp7CiAgICBmb3IoaW50IGkgPTE7IGk8PW47IGkrKyl7CiAgICAgICAgY291dDw8IkRpc3RhbmNlIG9mIG5vZGUgIjw8aTw8ICIgaXMgIiA8PGRpc1tpXTw8ZW5kbDsKICAgIH0KfQ==