Pagini recente » Cod sursa (job #2881334) | Cod sursa (job #2498429) | Cod sursa (job #2903166) | Cod sursa (job #3158161) | Cod sursa (job #1813121)
#include <stdio.h>
#include <stdlib.h>
int lst[100001], vf[1000001], urm[1000001], m, viz[100001], coada[1000001];
void adauga(int x, int y){
vf[++m]=y;
urm[m]=lst[x];
lst[x]=m;
}
void parBfs(int x, int N){
int p, y, beg, end;
beg=end=0;
viz[x]=1; coada[beg]=x;
while(beg<=end){
x=coada[beg++];
p=lst[x];
while(p){
y=vf[p];
if(!viz[y]){
coada[++end]=y;
viz[y]=viz[x]+1;
}
p=urm[p];
}
}
}
int main()
{
FILE *fin, *fout;
int N, M, x, y, i, S;
fin=fopen("bfs.in", "r");
fscanf(fin, "%d%d%d", &N, &M, &S);
for(i=0; i<M; i++){
fscanf(fin, "%d%d", &x, &y);
adauga(x, y);
}
fclose(fin);
parBfs(S, N);
fout=fopen("bfs.out", "w");
for(i=1; i<=N; i++)
fprintf(fout, "%d ", viz[i]-1);
fprintf(fout, "\n");
return 0;
}