Pagini recente » Cod sursa (job #2521628) | Cod sursa (job #1632557) | Cod sursa (job #2795425) | Cod sursa (job #1448561) | Cod sursa (job #1200420)
#include<stdio.h>
#include<vector>
#include<iostream>
#include<queue>
using namespace std;
#define NMAX 100005
vector<int> nodes[NMAX]; // nodurile din graf, e.g. nodes[i] contine vecinii lui i
vector<bool> viz(NMAX); // vector pt a verifica daca e vizitat sau nu
vector<int> costuri(NMAX); // vector pt costuri
int nr_noduri, nr_arce, nod_sursa, x, y;
queue<int> coada_cu_noduri;
void bfs(int nod)
{
viz[nod] = true;
for(int i = 0; i < nodes[nod].size(); ++i)
{
if(!viz[nodes[nod][i]])
{
coada_cu_noduri.push(nodes[nod][i]); // daca nu a fost vizitat il adaugam in coada
costuri[nodes[nod][i]] = costuri[nod]+1;
}
}
coada_cu_noduri.pop();
if(!coada_cu_noduri.empty())
bfs(coada_cu_noduri.front());
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
cin >> nr_noduri >> nr_arce >> nod_sursa;
for(int i = 0; i < nr_arce; ++i)
{
scanf("%d%d", &x, &y);
nodes[x].push_back(y);
}
coada_cu_noduri.push(nod_sursa); // adaugam nodul initial in sursa
bfs(nod_sursa);
/*
for(int i = 0; i < nr_noduri; ++i)
{
if(!viz[i])
bfs(i);
}
*/
int minus_unu = -1;
for(int i = 1; i <= nr_noduri; ++i)
{
if(viz[i])
printf("%d ", costuri[i]);
// nu se poate ajunge, cost -1
else
printf("%d ", minus_unu);
}
return 0;
}