Pagini recente » Cod sursa (job #605656) | Cod sursa (job #1366932) | Cod sursa (job #140448) | Cod sursa (job #1235527) | Cod sursa (job #1437944)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define Nmax 100002
#define inf 0x3f3f3f3f
FILE *f = fopen ( "bfs.in", "r" );
FILE *g = fopen ( "bfs.out", "w" );
vector < int > G[Nmax];
queue < int > Q;
int dist[Nmax];
void BFS ( int N, int Start ){
vector < int > :: iterator it;
for ( int i = 1; i <= N; ++i )
dist[i] = inf;
dist[Start] = 0;
Q.push ( Start );
while ( !Q.empty() ){
int nod = Q.front();
Q.pop();
for ( it = G[nod].begin(); it < G[nod].end(); ++it ){
if ( dist[*it] > dist[nod] + 1 ){
dist[*it] = dist[nod] + 1;
Q.push ( *it );
}
}
}
}
int main(){
int N, M, Start, x, y;
fscanf ( f, "%d%d%d", &N, &M, &Start );
for ( int i = 1; i <= M; ++i ){
fscanf ( f, "%d%d", &x, &y );
G[x].push_back ( y );
}
BFS ( N, Start );
for ( int i = 1; i <= N; ++i )
fprintf ( g, "%d ", dist[i] == inf ? -1 : dist[i] );
return 0;
}