Pagini recente » Cod sursa (job #536992) | Cod sursa (job #2330706) | Cod sursa (job #493327) | Cod sursa (job #2715515) | Cod sursa (job #234081)
Cod sursa(job #234081)
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
#define MAX 100010
int S, N, M;
vector<int> A[MAX];
int P[MAX];
void load() {
freopen( "bfs.in", "r", stdin );
freopen( "bfs.out", "w", stdout );
scanf( "%d %d %d", &N, &M, &S);
while ( M-- ) {
int x,y;
scanf( "%d %d", &x, &y );
A[x].push_back(y);
// A[y].push_back(x);
}
}
void bfs( int r ) {
memset( P, 0x3f, sizeof(int)*(N+1) );
queue<int> Q;
Q.push(r);
P[r] = 0;
while ( !Q.empty() ) {
int x = Q.front();
Q.pop();
for ( vector<int>::iterator it = A[x].begin(); it!=A[x].end(); ++it )
if ( P[ *it ] == 0x3f3f3f3f ) {
P[ *it ] = P[x] + 1;
Q.push( *it );
}
}
for ( int i=1; i<=N; ++i )
printf( "%d ", P[i] != 0x3f3f3f3f ? P[i] : -1 );
}
int main() {
load();
bfs( S );
return 0;
}