Pagini recente » Cod sursa (job #1421769) | Cod sursa (job #1253691) | Cod sursa (job #2308844) | Cod sursa (job #602220) | Cod sursa (job #2211626)
#include <stdio.h>
#include <stdbool.h>
#define N 1000001
int vf[N], urm[N], lst[N], d[N], q[N], n, nr, S;
void add(int x, int y){
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void bfs(int x0){
int i, x, y, st=0, dr=-1, p;
for(i=1;i<=n;i++){
d[i]=-1;
}
q[++dr]=x0;
d[x0]=0;
while(st<=dr){
x=q[st++];
p=lst[x];
while(p!=0){
y=vf[p];
if(d[y]==-1){
q[++dr]=y;
d[y]=1+d[x];
}
p=urm[p];
}
}
}
int main()
{
FILE *f1, *f2;
f1=fopen("bfs.in","r");
f2=fopen("bfs.out","w");
int m, i, x, y;
fscanf(f1,"%d%d%d",&n,&m,&S);
for(i=0;i<m;i++){
fscanf(f1,"%d%d",&x,&y);
add(x,y);
}
bfs(S);
for(i=1;i<=n;i++)
fprintf(f2,"%d ",d[i]);
return 0;
}