Cod sursa(job #530197)
#include <stdio.h>
#include <string.h>
int i,x,y,N,M,S,sol[100002],use[100002],ind,size,stack[100002];
struct tree
{
int nod;
tree *link;
}*Graf[100002];
inline void bf(int nod)
{
tree *p=Graf[nod];
while(p)
{
if(!use[p->nod])
{
use[p->nod]=1;
stack[++size]=p->nod;
sol[p->nod]=sol[nod]+1;
}
p=p->link;
}
ind++;
if(ind<=size) bf(stack[ind]);
}
inline void add(int x,int y)
{
tree *p;
p=new tree;
p->nod=y;
p->link=Graf[x];
Graf[x]=p;
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&N,&M,&S);
for(i=1;i<=M;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
}
memset(sol,-1,sizeof(sol));
memset(stack,0,sizeof(stack));
memset(use,0,sizeof(use));
use[S]=1;
sol[S]=0;
size=0;
ind=0;
bf(S);
for(i=1;i<N;i++)
printf("%d ",sol[i]);
printf("%d\n",sol[N]);
return 0;
}