Pagini recente » Cod sursa (job #1628537) | Cod sursa (job #1596942) | Cod sursa (job #2174477) | Cod sursa (job #3199067) | Cod sursa (job #2682735)
#include <iostream>
#include <deque>
using namespace std;
// BFS
int minim[100];
void Parcurgere(int n, int s, deque<int> node[]) {
int sorted[n + 1], start = 0, last = 1, total = 1;
sorted[0] = s;
while (start < last) { // Cat timp mai adaugam elemente
while (start < last) { // Elementele cu un rang inainte
for (int i = 0; i < node[sorted[start]].size(); i++) { // Parcurgem toate elementele care ajung in cel actual
int nr = node[sorted[start]][i];
if (!minim[nr]) { // Daca elementul nu a mai fost gasit
minim[nr]= minim[sorted[start]] + 1;
sorted[total] = nr;
total++;
}
}
start++;
}
last = total;
}
}
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<int> node[n + 1];
minim[s] = 1;
for (i = 0; i < m; i++) {
scanf("%d %d", &x, &y);
node[x].push_back(y); // din y in x
}
Parcurgere(n, s, node);
for (i = 1; i <= n; i++)
printf("%d ", minim[i] - 1);
}