Pagini recente » Cod sursa (job #567513) | Cod sursa (job #3248458) | Cod sursa (job #693501) | Cod sursa (job #2358988) | Cod sursa (job #247578)
Cod sursa(job #247578)
#include <stdio.h>
struct elem
{
int nod;
elem *next;
};
elem *p[100001];
struct coada
{
int info;
coada *adresa;
};
coada *varf,*sfarsit;
int vizitat_bf[100001],pasi[100001];
void adauga(int j,int k)
{
elem *newel=new elem;
newel->nod=k;
if (p[j]==NULL)
{
p[j]=newel;
newel->next=NULL;
}
else
{
newel->next=p[j];
p[j]=newel;
}
}
void add_coada(int x)
{
coada *add=new coada;
add->info=x;
sfarsit->adresa=add;
sfarsit=add;
}
void BF(int x)
{
while(varf!=NULL)
{
elem *current=p[varf->info];
while(current!=NULL)
{
if(vizitat_bf[current->nod]==0)
{
add_coada(current->nod);
pasi[current->nod]=pasi[varf->info]+1;
vizitat_bf[current->nod]=1;
}
current=current->next;
}
varf=varf->adresa;
}
}
int main()
{
coada *add=new coada;
int n,m,s,i,x,y;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
adauga(x,y);
}
add->info=s;
varf=add;
sfarsit=add;
vizitat_bf[s]=1;
BF(s);
for(i=1;i<=n;++i)
{
if(pasi[i]==0)
{
if(i==s)
printf("0 ");
else
printf("-1 ");
}
else
printf("%d ",pasi[i]);
}
return 0;
}