Pagini recente » Cod sursa (job #1613387) | Cod sursa (job #2434198) | Cod sursa (job #282195) | Cod sursa (job #2783423) | Cod sursa (job #2682402)
#include <iostream>
#include <deque>
using namespace std;
// BFS
struct Node {
int minim = -1;
deque<int> from;
};
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int n, m, s, i, x, y;
scanf("%d %d %d", &n, &m, &s);
deque <Node> nodes (n + 1);
for (i = 0; i < m; i++) {
cin >> x >> y;
nodes[x].from.push_back(y); // element y din care poti sa ajung in x
}
nodes[s].minim = 0;
int start = 0, last = 1, total = 1;
deque <Node> sorted (1, nodes[s]);
while (start < last) { // Cat timp mai adaugam elemente
while (start < last) { // Elementele cu un rang inainte
for (i = 0; i < sorted[start].from.size(); i++) { // Parcurgem toate elementele care ajung in cel actual
int nr = sorted[start].from[i];
if (nodes[nr].minim < 0) { // Daca elementul nu a mai fost gasit
nodes[nr].minim = sorted[start].minim + 1;
sorted.push_back(nodes[nr]);
total++;
}
}
start++;
}
last = total;
}
for (i = 1; i <= n; i++)
printf("%d ", nodes[i].minim);
}