Pagini recente » Cod sursa (job #2378507) | Cod sursa (job #379709) | Cod sursa (job #2600037) | Cod sursa (job #2692873)
#include <iostream>
#include <vector>
#include <list>
using namespace std;
struct Nod {
int minim = -1;
vector <int> from;
};
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int n, m, s, i, x, y;
Nod nodes[100010];
scanf("%d %d %d", &n, &m, &s);
while (m--) {
scanf("%d %d", &x, &y);
nodes[x].from.push_back(y);
}
list <int> parcurse(1, s);
nodes[s].minim = 0;
while (!parcurse.empty()) {
while (!nodes[parcurse.front()].from.empty()) {
i = nodes[parcurse.front()].from.back();
if (nodes[i].minim < 0) {
nodes[i].minim = nodes[parcurse.front()].minim + 1;
parcurse.push_back(i);
}
nodes[parcurse.front()].from.pop_back();
}
parcurse.pop_front();
}
for (i = 1; i <= n; i++)
printf("%d ", nodes[i].minim);
return 0;
}