Pagini recente » Cod sursa (job #994171) | Cod sursa (job #1192386) | Cod sursa (job #1821422) | Cod sursa (job #3266264) | Cod sursa (job #297578)
Cod sursa(job #297578)
#include<stdio.h>
FILE *f,*g;
long t[3][1000001],st[100001],ok,fin[100001],viz[100001],nivel[100001],n,m,s,liber,i,x,y,c[100001],p,pm,u,nv;
int main()
{ f=fopen("bfs.in","r"); g=fopen("bfs.out","w");
fscanf(f,"%ld%ld%ld",&n,&m,&s);
liber=1;
for(i=1;i<=m;i++)
{ fscanf(f,"%ld%ld",&x,&y);
if(c[x]==0) { c[x]=liber; t[1][liber]=y; fin[x]=liber; liber++; }
else { p=fin[x]; t[2][p]=liber; t[1][liber]=y; liber++; }
}
pm=1; u=1; st[1]=s; nivel[s]=0; nv=1; viz[s]=1;
while(pm<=u)
{ p=c[st[pm]];
while(p!=0)
{ if(!viz[t[1][p]]) { u++; viz[t[1][p]]=1; st[u]=t[1][p]; nivel[t[1][p]]=nivel[st[pm]]+1; }
p=t[2][p];
}
pm++;
}
for(i=1;i<=n;i++)
if(nivel[i]!=0) fprintf(g,"%ld ",nivel[i]);
else if(!viz[i]) fprintf(g,"-1 ");
else fprintf(g,"0 ");
fclose(g);
return 0;
}