Cod sursa(job #530196)
#include <stdio.h>
#include <string.h>
int i,x,y,N,M,S,sol[100002],use[100002],ind,size;
struct vector
{
int nod,level;
}stack[100002];
struct tree
{
int nod;
tree *link;
}*Graf[100002];
inline void bf(int nod,int level)
{
sol[nod]=level;
use[nod]=1;
tree *p=Graf[nod];
while(p)
{
if(!use[p->nod]) stack[++size].nod=p->nod,stack[size].level=level+1;
p=p->link;
}
if(++ind<=size) bf(stack[ind].nod,stack[ind].level);
}
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));
size=0;
ind=0;
bf(S,0);
for(i=1;i<N;i++)
printf("%d ",sol[i]);
printf("%d\n",sol[N]);
return 0;
}