Pagini recente » Cod sursa (job #530158) | Cod sursa (job #236398) | Cod sursa (job #2052634) | Cod sursa (job #358480) | Cod sursa (job #395512)
Cod sursa(job #395512)
#include <stdio.h>
#include <string.h>
int n,m,s,eredmeny[100001];
bool vazut[100001];
struct adat{
int x;
adat *kov;
adat(){kov=0;}
};
struct adat2{
int x,tav;
adat2 *kov;
adat2(){kov=0;}
};
adat *a[100001];
adat2 *elso,*utolso;
void add(int x,int y){
adat *p=new adat;
p->x=y;
p->kov=a[x];
a[x]=p;
}
void vizsgal(int x,int y){
adat *p;
adat2 *seged;
p=a[x];
eredmeny[x]=y;
while(p!=0){
if(!vazut[p->x]){vazut[p->x]=1;
seged=new adat2;
seged->x=p->x;
seged->tav=y+1;
utolso->kov=seged;
utolso=seged;
}
p=p->kov;
}
}
int main(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int i,temp1,temp2;
adat2 *seged;
scanf("%d %d %d",&n,&m,&s);
for(i=1;i<=m;i++){
scanf("%d %d",&temp1,&temp2);
add(temp1,temp2);
}
for(i=1;i<=n;i++){eredmeny[i]=-1;}
elso=new adat2;
utolso=elso;
elso->x=s;
elso->tav=0;
do{
vizsgal(elso->x,elso->tav);
seged=elso;
elso=elso->kov;
delete seged;
}while(elso!=0);
eredmeny[s]=0;
for(i=1;i<=n;i++){printf("%d ",eredmeny[i]);}
return 0;
}