Pagini recente » Cod sursa (job #1818948) | Cod sursa (job #1644018) | Cod sursa (job #1259878) | Cod sursa (job #2936170) | Cod sursa (job #282011)
Cod sursa(job #282011)
#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);
//adauga(v[y],x);
}
}
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;
}