Pagini recente » Cod sursa (job #367234) | Cod sursa (job #2817598) | Borderou de evaluare (job #133079) | Cod sursa (job #1262349) | Cod sursa (job #251717)
Cod sursa(job #251717)
#include<cstdio>
struct point{
long inf;
point *leg;
}*lista[100010],*p;
long n,m,s,i,niv[100010],x,y;
int ok[100010];
void bfs(long x,long nivel){
point *p;
niv[x]=nivel;ok[x]=1;
for(p=lista[x];p!=0;p=p->leg)
if(ok[p->inf]==0){
niv[p->inf]=nivel+1;
ok[p->inf]=-1;
}
for(p=lista[x];p!=0;p=p->leg)
if(ok[p->inf]==-1){
ok[p->inf]=1;
bfs(p->inf,nivel+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]->leg=0;
lista[x]=p;
}
bfs(s,0);
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;
}