Pagini recente » Cod sursa (job #1418919) | Cod sursa (job #1070803) | Monitorul de evaluare | Cod sursa (job #362887) | Cod sursa (job #2682722)
#include <iostream>
#include <deque>
using namespace std;
// BFS
int minim[100010];
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];
for (i = 0; i < m; i++) {
scanf("%d %d", &x, &y);
node[x].push_back(y); // din y in x
}
int sorted[n + 1], start = 0, last = 1, total = 1;
sorted[0] = s;
minim[s] = 1;
while (start < last) { // Cat timp mai adaugam elemente
while (start < last) { // Elementele cu un rang inainte
for (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;
}
for (i = 1; i <= n; i++)
printf("%d ", minim[i] - 1);
}