Pagini recente » Cod sursa (job #1198595) | Cod sursa (job #1615179) | Cod sursa (job #440351) | Cod sursa (job #3194386) | Cod sursa (job #297406)
Cod sursa(job #297406)
#include<stdio.h>
FILE *f,*g;
long t[3][1000000],st[100000],viz[100000],nivel[100000],n,m,s,liber,i,x,y,c[100000],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(x!=y)
{ if(!c[x]) { c[x]=liber; t[1][liber]=y; liber++; }
else { p=c[x]; while(t[2][p]!=0) p=t[2][p]; 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]]=nv; }
p=t[2][p];
}
pm++; nv++;
}
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;
}