Pagini recente » Cod sursa (job #1158096) | Cod sursa (job #1058206) | Cod sursa (job #2594552) | Cod sursa (job #853630) | Cod sursa (job #251718)
Cod sursa(job #251718)
#include<cstdio>
struct point{
long inf;
point *leg;
}*lista[100010],*p;
long n,m,x,y,s,i,ok[100010],niv[100010],b[100010];
void bfs(long x){
point *p;
long st,dr;
niv[x]=0;
ok[x]=1;
b[0]=x;
for(st=0,dr=1;st<dr;st++)
for(p=lista[b[st]];p!=0;p=p->leg)
if(ok[p->inf]==0){
b[dr++]=p->inf;
ok[p->inf]=1;
niv[p->inf]=niv[b[st]]+1;
}
}
int main(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&s);
for(i=0;i<m;i++){
scanf("%ld%ld",&x,&y);
p=new point;
p->inf=y;
p->leg=lista[x];
lista[x]=p;
}
bfs(s);
/*for(i=1;i<=n;i++){
for(p=lista[i];p!=0;p=p->leg)
printf("%ld ",p->inf);
printf("\n");
}*/
for(i=1;i<=n;i++)
if(niv[i]!=0)printf("%ld ",niv[i]);
else if(i!=s)printf("-1 ");
else printf("0 ");
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}