Pagini recente » Cod sursa (job #1831624) | Cod sursa (job #688924) | Cod sursa (job #1766323) | Cod sursa (job #2460768) | Cod sursa (job #283423)
Cod sursa(job #283423)
#include<stdio.h>
#define N 100000
int n,m,s,d[N];
struct nod
{
int info;
nod *adr;
};
nod *v[N];
void adauga(nod *&vf,int x){
nod *q=new nod;
q->info=x;
q->adr=vf;
vf=q;
}
void citire(){
int x,y;
scanf("%d%d%d",&n,&m,&s);
while(m--){
scanf("%d%d",&x,&y);
adauga(v[x],y);
}
}
void adauga_c(nod *&u,int x){
nod *q=new nod;
q->info=x;
q->adr=0;
u->adr=q;
u=q;
}
void init(){
for(int i=1;i<=N;i++)
d[i]=-1;
}
void bfs(int s){
int x,y;
nod*p=new nod,*u,*aux;
p->info=s;
p->adr=0;
u=p;
d[s]=0;
while(p){
x=p->info;
for(aux=v[x] ; aux ; aux=aux->adr){
y=aux->info;
if(d[y]==-1){
adauga_c(u,y);
d[y]=1+d[x];
}
}
aux=p;
p=p->adr;
delete aux;
}
}
void scrie(){
for(int i=1;i<=n;i++)
printf("%d ",d[i]);
}
int main(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
citire();
init();
bfs(s);
scrie();
return 0;
}