Cod sursa(job #641720)
#include <stdio.h>
#include<vector>
using namespace std;
vector<int> muchii[100003];
int sel[100003];
void bf(int,int);
int main()
{
int numar_noduri, nr_muchii, nod_sursa;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d", &numar_noduri, &nr_muchii, &nod_sursa);
int prima, destinatie;
for( int i=1;i<=nr_muchii;i++)
{
scanf("%d %d", &prima,&destinatie);
muchii[prima].push_back(destinatie);
}
bf(nod_sursa,numar_noduri);
for (int j=1;j<=numar_noduri;j++)
printf("%d ",sel[j]-1);
return 0;
}
void bf(int nod_sursa ,int numar_noduri)
{
vector<int> coada_bf;
coada_bf.push_back(nod_sursa);
int element_actual=0;
sel[nod_sursa]=1;
while( element_actual< coada_bf.size())
{
int nod_actual=coada_bf[element_actual];
int nr_vecini= muchii[nod_actual].size();
for(int j=0;j < nr_vecini; ++j)
if (sel[muchii[nod_actual][j]]==0)
{
coada_bf.push_back(muchii[nod_actual][j]);
sel[muchii[nod_actual][j]]=sel[nod_actual]+1;
}
++element_actual;
}
}