Pagini recente » Cod sursa (job #2749040) | Cod sursa (job #2415744) | Cod sursa (job #2814731) | Cod sursa (job #3241010) | Cod sursa (job #281528)
Cod sursa(job #281528)
#include<stdio.h>
#define MMAX 1000000
#define NMAX 100000
int n,m,s;
struct muchie{
int a, b;
};
muchie vm[MMAX+1];
struct nod{
int info;
nod *adr;
};
struct lista{
nod *vf, *sf;
};
lista vl[NMAX+1];
int coada[NMAX+1],li=1,ls=0;
int d[NMAX+1];
int viz[NMAX+1];
void pune(lista &l,int x){
nod *n=new nod;
n->info=x;
n->adr=NULL;
if(!l.vf) l.vf=n;
else l.sf->adr=n;
l.sf=n;
}
void punec(int x){
ls++;
coada[ls]=x;
viz[x]=1;
}
void scoatec(int &x){
x=coada[li];
li++;
}
int coadavida(){
return li>ls;
}
int main(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int i;
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=m;i++)
scanf("%d%d",&vm[i].a,&vm[i].b);
for(i=1;i<=m;i++)
pune(vl[vm[i].a],vm[i].b);
punec(s);
while(!coadavida()){
int x;
scoatec(x);
nod *nc=vl[x].vf;
while(nc){
int y=nc->info;
if(!viz[y]){
punec(y);
d[y]=d[x]+1;
}
nc=nc->adr;
}
}
for(i=1;i<=n;i++)
if(!d[i]) d[i]=-1;
d[s]=0;
for(i=1;i<=n;i++)
printf("%d ",d[i]);
return 0;
}