Pagini recente » Profil Antonia20032604 | Cod sursa (job #797985)
Cod sursa(job #797985)
#include <cstdio>
using namespace std;
int n,m,vf;
struct nod{
int x;
nod *urm;
};
struct varf{
int lung;
int viz;
nod *p;
nod *u;
}*a[1000000];
void adaugare_prim(int x,nod *&p,nod *&u)
{
p=new nod;
p->x=x;
p->urm=NULL;
u=p;
}
void adaugare_sf(int x,nod *&u)
{
nod *q=new nod;
q->x=x;
q->urm=NULL;
u->urm=q;
u=q;
}
void citire ()
{
freopen("bfs.in","r",stdin);
int x,y;
scanf("%d %d %d",&n,&m,&vf);
for(int i=0;i<m;i++)
{
scanf("%d %d",&x,&y);
if(!a[x]){
a[x]=new varf;
a[x]->viz=0;
a[x]->lung=-1;
adaugare_prim(y,a[x]->p,a[x]->u);
}
else
adaugare_sf(y,a[x]->u);
}
}
nod *c,*uc;
void latime (){
adaugare_prim(vf,c,uc);
a[vf]->viz=0;
a[vf]->lung=0;
for(nod *i=c; i; i=i->urm){
int x=i->x;
for(nod *j=a[x]->p;j;j=j->urm){
if(a[j->x]->viz==0){
adaugare_sf(j->x,uc);
a[j->x]->viz=1;
if(a[j->x]->lung>a[x]->lung || a[j->x]->lung==-1)
a[j->x]->lung=a[x]->lung+1;
}
}
}
}
void afisare ()
{
freopen("bfs.out","w",stdout);
for(int i=1;i<=n;i++)
printf("%d ",a[i]->lung);
printf("\n");
}
int main ()
{
citire();
latime();
afisare();
return 0;
}