Pagini recente » Cod sursa (job #286913) | Cod sursa (job #1107725) | Statistici Bandarau Petronela Adriana (Petronela22) | Cod sursa (job #914540) | Cod sursa (job #250147)
Cod sursa(job #250147)
#include <stdio.h>
#define Nmax 1100100
struct elem
{
int nod;
elem *next;
};
elem *p[Nmax];
int vizitat_bf[Nmax],inceput=1,sfarsit=1,pasi[Nmax],coada[Nmax];
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 BF(int x)
{
while(inceput <= sfarsit)
{
elem *current=p[coada[inceput]];
while(current!=NULL)
{
if(vizitat_bf[current->nod]==0)
{
coada[++sfarsit]=current->nod;
pasi[current->nod]=pasi[coada[inceput]]+1;
vizitat_bf[current->nod]=1;
++sfarsit;
}
current=current->next;
}
++inceput;
}
}
int main()
{
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);
}
coada[1]=s;
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;
}