Pagini recente » Cod sursa (job #686839) | Cod sursa (job #591262) | Cod sursa (job #1599177) | Cod sursa (job #2831135) | Cod sursa (job #632902)
Cod sursa(job #632902)
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
vector <int> vecinii[100001];
vector <int> coada_bfs;
int sel[ 100001];
void bfs (const int &nod_sursa, const int &numar_noduri) {
freopen("bfs.out","w",stdout);
coada_bfs.push_back(nod_sursa);
sel[nod_sursa] = 1;
// se pune in coada si se selecteaza nodul sursa
for (int element_actual = 0; element_actual < coada_bfs.size(); ++element_actual)
{
// se parcurge toata coada
int nod_actual = coada_bfs[element_actual];
int nr_vecini = vecinii[nod_actual].size();
for (int j = 0; j < nr_vecini; ++j)
// se verifica daca au fost selectati vecinii
if (sel[vecinii[nod_actual][j]] == 0)
{
coada_bfs.push_back( vecinii[nod_actual][j]);
sel[ vecinii[nod_actual][j]] = sel[nod_actual] + 1;
// numarul de muchii care trebuie parcurs pentru a ajunge la nodul muchii[nod_actual][j]
}
}
for (int i = 1; i <= numar_noduri; ++i)
{
printf("%d ",sel[i] - 1);
}
}
int main() {
freopen("bfs.in","r",stdin);
int numar_noduri, numar_muchii, nod_sursa;
scanf("%d %d %d ",&numar_noduri,&numar_muchii,&nod_sursa);
for (int i = 1; i <= numar_muchii; ++i)
{
int sursa, destinatie;
scanf("%d%d",&sursa,&destinatie);
vecinii[sursa].push_back(destinatie);
// se retin in acest vector vecinii nodului sursa
}
bfs (nod_sursa, numar_noduri);
return 0;
}