Pagini recente » Cod sursa (job #1381350) | Cod sursa (job #2190963) | Cod sursa (job #3150585) | Cod sursa (job #2051776) | Cod sursa (job #658853)
Cod sursa(job #658853)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int MAX_N = 100002;
const char infile[] = "bfs.in";
const char outfile[] = "bfs.out";
vector < int > G[ MAX_N ];
queue < int > Q;
int use[ MAX_N ], cost[ MAX_N ];
int N, M, S;
void read(){
FILE *f;
int x, y;
f = fopen( infile, "rt" );
fscanf( f, "%d %d %d", &N, &M, &S );
for( ; M; M-- ){
fscanf( f, "%d %d", &x, &y );
G[ x ].push_back( y );
}
}
void bfs( int node ){
int new_node;
vector < int > :: iterator it;
for( int i = 1; i <= N; ++i )
cost[ i ] = -1;
cost[ node ] = 0;
use[ node ] = 1;
Q.push( node );
while( !Q.empty() ){
new_node = Q.front();
Q.pop();
for( it = G[ new_node ].begin(); it != G[ new_node ].end();
++it )
if( !use[ *it ] ){
use[ *it ] = 1;
cost[ *it ] = cost[ new_node ] + 1;
Q.push( *it );
}
}
}
void write(){
FILE *g;
g = fopen( outfile, "wt" );
for( int i = 1; i <= N; ++i )
fprintf( g, "%d ", cost[ i ] );
}
int main(){
read();
bfs( S );
write();
return 0;
}