Pagini recente » Cod sursa (job #640253) | Cod sursa (job #1571110) | Profil Brinzei | Cod sursa (job #568759) | Cod sursa (job #276454)
Cod sursa(job #276454)
#include<stdio.h>
struct nod { int v;
nod *next;
} *v[100001];
long n,m,cost[100001],t[100001],s[100001],pus[100001],ss;
void citire()
{ long i,x,y;
nod *nou;
freopen("bfs.in","r",stdin);
scanf("%ld%ld%ld",&n,&m,&ss);
for(i=1;i<=m;i++)
{ scanf("%ld%ld",&x,&y);
nou=new nod;
nou->v=y;
nou->next=v[x];
v[x]=nou;
}
}
void bf(long nd)
{ long st=1,d=1,i;
t[nd]=-1;
s[d]=nd;
pus[nd]=1;
nod *p;
while(st<=d)
{ p=v[s[st]];
while(p!=NULL)
{ if(pus[p->v]==0)
{ pus[p->v]=1;
s[++d]=p->v;
t[s[d]]=s[st];
cost[s[d]]=cost[t[s[d]]]+1;
}
p=p->next;
}
st++;
}
for(i=1;i<=n;i++)
if(t[i]==0) cost[i]=-1;
}
int main()
{ freopen("bfs.out","w",stdout);
long i;
nod *p;
citire();
bf(ss);
for(i=1;i<=n;i++)
printf("%d ",cost[i]);
return 0;
}