Pagini recente » Cod sursa (job #463222) | Cod sursa (job #1658710) | Cod sursa (job #1674911) | Cod sursa (job #785138) | Cod sursa (job #767602)
Cod sursa(job #767602)
/*
Parcurgerea in latime intr-un graf.
*/
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <stdbool.h>
#define MAXN 100000
using namespace std;
int nr_noduri, nr_muchii, sursa;
vector<int> noduri[MAXN];
queue<int> coada;
int dist[MAXN];
void bfs () {
int i;
for (i = 1; i <= nr_noduri; i++)
dist[i] = INT_MAX;
dist[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 (dist[v] > dist[u] + 1) {
dist[v] = dist[u] + 1;
coada.push(v);
}
}
}
}
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 && i != sursa)
printf("-1 ");
else
printf("%d ", dist[i]);
return 0;
}