Pagini recente » Cod sursa (job #1280410) | Cod sursa (job #783037) | Monitorul de evaluare | Cod sursa (job #1138521) | Cod sursa (job #1434721)
#include <cstdio>
#include <cstring>
#include <vector>
#define DIM 100010
using namespace std;
FILE *fin = fopen("bfs.in" ,"r");
FILE *fout= fopen("bfs.out","w");
int N, M, S, X, Y, F[DIM], Cd[2][DIM], Cost[DIM];
vector <int> V[DIM];
void SetUp(){
fscanf(fin, "%d %d %d ", &N, &M, &S);
for(int i = 1; i <= M; i ++){
fscanf(fin, "%d %d", &X, &Y);
V[X].push_back(Y);
} memset(Cost, -1, sizeof(Cost));
return;
}
void BFS(){
int p = 1, u = 1, K = 1;
Cd[1][K] = S;
Cd[2][K] = 0;
F[S] = 1;
Cost[S] = 0;
for(p = 1; p <= u; p ++){
for(int i = 0; i < V[Cd[1][p]].size(); i ++)
if(F[V[Cd[1][p]][i]] == 0){
F[V[Cd[1][p]][i]] = 1;
u ++;
Cd[1][u] = V[Cd[1][p]][i];
Cd[2][u] = Cd[2][p] + 1;
Cost[Cd[1][u]] = Cd[2][u];
}
}
return;
}
void Finish(){
for(int i = 1; i <= N; i ++)
fprintf(fout, "%d ", Cost[i]);
return;
}
int main(){
SetUp();
BFS();
Finish();
return 0;
}