Pagini recente » Cod sursa (job #2065027) | Cod sursa (job #2866158) | Cod sursa (job #460547) | Cod sursa (job #2000273) | Cod sursa (job #266827)
Cod sursa(job #266827)
#include<stdio.h>
#define MAX 1200000
struct nod{
int info;
nod *adress;
};
nod*p[MAX];
long pasi[MAX],vizitat[MAX],coada[MAX],st=1,dr=1;
void adauga(long x, long y)
{
nod *element=new nod;
element->info=y;
if (p[x]==NULL)
{
p[x]=element;
element->adress=NULL;
}
else
{
element->adress=p[x];
p[x]=element;
}
}
void bfs(long a)
{
while(st <= dr)
{
nod *e=p[coada[st]];
while(e!=NULL)
{
if(vizitat[e->info]==0)
{++dr;
coada[dr]=e->info;
pasi[e->info]=pasi[coada[st]]+1;
vizitat[e->info]=1;
++dr;
}
e=e->adress;
}
++st;
}
}
int main()
{
int n,m,s,x,y;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%ld%ld%ld",&n,&m,&s);
for(int i=1;i<=m;++i)
{
scanf("%ld%ld",&x,&y);
adauga(x,y);
}
coada[1]=s;
vizitat[s]=1;
bfs(s);
for(int i=1;i<=n;++i)
{
if(pasi[i]==0)
{
if(i==s)
printf("0 ");
else
printf("-1 ");
}
else
printf("%ld ",pasi[i]);
}
return 0;
}