Pagini recente » Cod sursa (job #2268958) | Cod sursa (job #1729771) | Cod sursa (job #95865) | Cod sursa (job #2817024) | Cod sursa (job #247487)
Cod sursa(job #247487)
#include<stdio.h>
#include<vector>
#define nmax 1000
struct nod
{
int info;
nod *adr;
};
nod *lis[nmax];
int viz[nmax],n;
void add(nod *&,int);
void addc(nod *&,nod *&,int);
void sterg(nod *&);
void bfs(int);
int main()
{
int m,x,a,y;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&n,&m,&a);
for(;m;m--)
{
scanf("%d%d",&x,&y);
if (x!=y)
add(lis[x],y);
}
bfs(a);
for(int i=1;i<=n;++i)
printf("%d ",viz[i]);
return 0;
}
void bfs(int a)
{
memset(viz,-1,nmax);
nod *inc=0,*sfc=0;
addc(inc,sfc,a);
viz[a]=0;
for(;inc;sterg(inc))
{
nod *p=lis[inc->info];
for(;p;p=p->adr)
if (viz[p->info]==-1)
{
addc(inc,sfc,p->info);
viz[p->info]=viz[inc->info]+1;
}
}
}
void add(nod *&in,int inf)
{
if (in)
{
nod *p=new nod;
p->info=inf;
p->adr=in;
in=p;
}
else
{
nod *p=new nod;
p->info=inf;
in=p;
}
}
void addc(nod *&inc,nod *&sfc,int inf)
{
if (inc)
{
nod *p=new nod;
p->info=inf;
p->adr=0;
sfc->adr=p;
sfc=p;
}
else
{
nod *p=new nod;
p->info=inf;
p->adr=0;
inc=p;
sfc=p;
}
}
void sterg(nod *&inc)
{
nod *p=inc->adr;
delete inc;
inc=p;
}