Pagini recente » Cod sursa (job #3290149) | Cod sursa (job #457846) | Istoria paginii lot-2017/baraj-1 | Statisticile problemei Cntnk | Cod sursa (job #1229596)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define FIN "bfs.in"
#define FOUT "bfs.out"
#define MAX 500001
#define pb push_back
using namespace std;
int dist[ MAX ];
bool visited[ MAX ];
vector<int> Adjacency_List[ MAX ];
queue<int> Queue;
int num_nodes,
num_arcs,
source;
//function prototypes
void readGraph();
void BFS();
void write();
void adjacency();
int main() {
readGraph();
BFS();
write();
return 0;
};
void readGraph() {
int x,
y;
freopen(FIN, "r", stdin);
scanf("%d %d %d", &num_nodes, &num_arcs, &source);
for(; num_arcs; num_arcs--) {
scanf("%d %d", &x, &y);
Adjacency_List[ x ].pb( y );
}
fclose( stdin );
};
void BFS() {
int node;
for(int k = 1; k <= num_nodes; k++) dist[ k ] = 0, visited[ k ] = false;
visited[ source ] = true;
Queue.push( source );
while( !Queue.empty() ) {
node = Queue.front();
visited[ node ] = true;
Queue.pop();
for(vector<int>::iterator it = Adjacency_List[ node ].begin(); it != Adjacency_List[ node ].end(); ++it) {
if( !visited[ *it ] ) {
visited[ *it ] = true;
Queue.push( *it );
dist[ *it ] = dist[ node ] + 1;
}
}
}
};
void write() {
freopen(FOUT, "w", stdout);
for(int k = 1; k <= num_nodes; k++) {
if(dist[ k ]) printf("%d ", dist[k]);
else if(k == source && dist[k] == 0) printf("0 ");
else printf("-1 ");
}
fclose( stdout );
};