Pagini recente » Cod sursa (job #1405571) | Cod sursa (job #696323) | Cod sursa (job #3211639) | Cod sursa (job #724574) | Cod sursa (job #632221)
Cod sursa(job #632221)
#include <cstdio>
#define N 100000
using namespace std;
int n,m,s;
struct nod
{
int inf;
nod *urm;
}*l[N];
void add(int x,nod *&p)
{
nod *q=new nod;
q->inf=x;
q->urm=p;
p=q;
}
void read()
{ int x,y;
scanf("%d %d %d",&n,&m,&s);
for(int i=1;i<m;i++)
{
scanf("%d %d",&x,&y);
add(y,l[x]);
}
}
struct c
{
int val;
int cost;
}coada[2*N];
int viz[N];
void bfs()
{
int st=1;
int fn=1;
coada[fn++].val=s;
viz[s]=1;
for(int i=1;i<=fn;i++)
{
for(nod *j=l[coada[i].val];j;j=j->urm)
{
if(!viz[j->inf])
{
coada[fn].val=j->inf;
coada[fn++].cost=coada[i].cost+1;
viz[j->inf]=1;
}
}
st++;
}
}
void afis()
{
for(int i=1;i<=n;i++)
{ int ok=0;
for(int j=1;j<=n;j++)
{
if(coada[j].val==i)
{printf("%d ",coada[j].cost);
ok=1;
break;
}
}
if (ok==0)
{
printf("-1 ");
}
}
}
int main()
{ freopen("bfs.in","r",stdin);
freopen("bfs.out", "w",stdout);
read();
bfs();
afis();
return 0;
}