Pagini recente » Cod sursa (job #2628487) | Cod sursa (job #767374) | Cod sursa (job #2527612) | Cod sursa (job #1800715) | Cod sursa (job #768810)
Cod sursa(job #768810)
/*
Parcurgerea in latime intr-un graf.
*/
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#define MAXN 100000
using namespace std;
int nr_noduri, nr_muchii, sursa;
int dist[MAXN];
bool vizitat[MAXN];
vector<int> noduri[MAXN];
queue<int> coada;
void bfs () {
int i;
for (i = 1; i <= nr_noduri; i++) {
dist[i] = INT_MAX;
vizitat[i] = 0;
}
dist[sursa] = 0;
vizitat[sursa] = 0;
coada.push(sursa);
while (!coada.empty()) {
int u = coada.front();
coada.pop();
for (i = 0; i < noduri[u].size(); i++) {
int v = noduri[u][i];
if ((!vizitat[i]) && (dist[v] > dist[u] + 1)) {
dist[v] = dist[u] + 1;
coada.push(v);
vizitat[v] = 1;
}
}
}
}
int main () {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int i, x, y;
scanf("%d %d %d", &nr_noduri, &nr_muchii, &sursa);
for (i = 0; i < nr_muchii; i++) {
scanf("%d %d", &x, &y);
noduri[x].push_back(y);
}
bfs();
for (i = 1; i <= nr_noduri; i++)
if (dist[i] == INT_MAX)
printf("-1 ");
else
printf("%d ", dist[i]);
return 0;
}