Pagini recente » Cod sursa (job #1434517) | Cod sursa (job #1568746) | Cod sursa (job #282322) | Cod sursa (job #2721008) | Cod sursa (job #251376)
Cod sursa(job #251376)
#include<cstdio>
struct point{
long inf;
point *leg;
}*lista[100000],*p;
long n,m,x,y,s,i,ok[100000],niv[100000],b[2][100000];
void bfs(long x){
long nr=0,pus=0,nr1=0,aux,iau;
point *p;
ok[x]=1;niv[x]=0;
for(p=lista[x];p!=0;p=p->leg)
if(ok[p->inf]==0){
b[pus][nr++]=p->inf;
niv[p->inf]=1;
ok[p->inf]=1;
}
iau=pus;pus=1;
while(nr>0){
for(i=0;i<nr;i++)
for(p=lista[b[iau][i]];p!=0;p=p->leg)
if(ok[p->inf]==0){
ok[p->inf]=1;
b[pus][nr1++]=p->inf;
niv[p->inf]=niv[b[iau][i]]+1;
}
aux=pus;pus=iau;iau=aux;
nr=nr1;nr1=0;
}
}
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;
}