Pagini recente » Cod sursa (job #836583) | Cod sursa (job #2314432) | Cod sursa (job #2651390) | Cod sursa (job #827805) | Cod sursa (job #1889233)
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
#define NMAX 100005
#define INFI 0x3f3f3f3f
int D[ NMAX ];
queue < int > Q;
vector < int > v[ NMAX ];
void BFS ( int start ) {
int n, m, i;
D[ start ] = 0;
Q.push( start );
while ( !Q.empty() ) {
m = Q.front();
Q.pop();
n = v[ m ].size();
for ( i = 0; i < n; ++i ) {
if ( D[ v[ m ][ i ] ] == INFI ) {
D[ v[ m ][ i ] ] = D[ m ] + 1;
Q.push( v[ m ][ i ] );
}
}
}
}
int main () {
freopen( "bfs.in", "r", stdin );
freopen( "bfs.out", "w", stdout );
int n, m, i, j, x, y, s, t;
scanf( "%d%d%d",&n,&m,&s );
while ( m-- ) {
scanf( "%d%d",&x,&y );
v[ x ].push_back ( y );
}
for ( i = 1; i <= n; ++i ) {
D[ i ] = INFI;
}
BFS ( s );
for ( i = 1; i <= n; ++i ) {
if ( D[ i ] < INFI ) printf( "%d ",D[ i ] );
else printf( "-1 " );
}
return 0;
}