Pagini recente » Cod sursa (job #3183022) | Cod sursa (job #2593782) | Cod sursa (job #3144434) | Cod sursa (job #359399) | Cod sursa (job #2506986)
#include <stdio.h>
#include <vector>
#include <queue>
#define MAXN 100000
using namespace std;
vector<int> adjl[MAXN + 1];
queue<int> q;
int drum[MAXN + 1];
char viz[MAXN + 1];
void BFS() {
int i, nod, vec;
while ( !q.empty() ) {
nod = q.front();
q.pop();
for ( i = 0; i < adjl[nod].size(); ++i ) {
vec = adjl[nod][i];
if ( viz[vec] != 1 ) {
q.push( vec );
drum[vec] = drum[nod] + 1;
viz[vec] = 1;
}
}
}
}
int main() {
FILE *fin = fopen( "bfs.in", "r" );
FILE *fout = fopen( "bfs.out", "w" );
int n, m, S, i, x, y;
fscanf( fin, "%d%d%d", &n, &m, &S );
for ( i = 0; i < m; ++i ) {
fscanf( fin, "%d%d", &x, &y );
adjl[x].push_back( y );
}
for ( i = 1; i <= n; ++i ) {
drum[i] = -1;
}
drum[S] = 0;
viz[S] = 1;
q.push( S );
BFS();
for ( i = 1; i <= n; ++i ) {
fprintf( fout, "%d ", drum[i] );
}
fclose( fin );
fclose( fout );
return 0;
}