Pagini recente » Cod sursa (job #598992) | Cod sursa (job #1704663) | Cod sursa (job #312206) | Cod sursa (job #324065) | Cod sursa (job #1045014)
#include <stdio.h>
using namespace std;
const int NLen=100001;
const int MLen=1000001;
int Dest[NLen];
int use[NLen];
int q[MLen];
struct graf
{
int node;
graf *link;
graf(int node,graf *link)
{
this->node=node;
this->link=link;
}
}*g[NLen];
void addTo(graf *&g,int node)
{
graf *p=new graf(node,g);
g=p;
}
void bfs(int node)
{
use[node]=1;
Dest[node]=0;
int start,end;
start=end=1;
q[start]=node;
while(start<=end)
{
node=q[start++];
for(graf *p=g[node];p;p=p->link)
if(!use[p->node])
{
use[p->node]=1;
q[++end]=p->node;
Dest[p->node]=Dest[node]+1;
}
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int N,M,S;
scanf("%d%d%d",&N,&M,&S);
while(M--)
{
int x,y;
scanf("%d%d",&x,&y);
addTo(g[x],y);
}
//initialization
for(int i=1;i<=N;++i)
{
Dest[i]=-1;
use[i]=0;
}
bfs(S);
for(int i=1;i<=N;++i)
printf("%d ",Dest[i]);
printf("\n");
return 0;
}