Cod sursa(job #288562)
#include<stdio.h>
int n,m,s,vizitat[100001];
struct graf
{
int inf;
graf *leg;
} *l[100001];
void add (int x, int y)
{
graf *p;
p=new graf;
p->inf=y;
p->leg=l[x];
l[x]=p;
}
void read ()
{
int i,x,y;
FILE *f=fopen("bfs.in","r");
fscanf(f,"%d%d%d",&n,&m,&s);
for (i=1;i<=m;++i)
{
fscanf(f,"%d%d",&x,&y);
add(x,y);
}
fclose(f);
}
int exista (int x, int y)
{
graf *p;
p=l[x];
while (p!=NULL)
{
if (p->inf == y)
return 1;
p=p->leg;
}
return 0;
}
void bfs (int vf)
{
int i,c[100001],inc,sf;
inc=sf=1;
c[1]=vf;
while (inc<=sf)
{
for (i=1;i<=n;++i)
if ( !vizitat[i] && exista(c[inc],i) && i!=vf )
{
vizitat[i]=vizitat[c[inc]]+1;
c[++sf]=i;
}
++inc;
}
}
void write ()
{
FILE *f=fopen("bfs.out","w");
int i;
for (i=1;i<=n;++i)
if(vizitat[i] || i==s)
fprintf(f,"%d ",vizitat[i]);
else
fprintf(f,"-1 ");
fclose(f);
}
int main ()
{
read ();
bfs (s);
write ();
return 0;
}