Pagini recente » Diferente pentru utilizator/rolandpetrean intre reviziile 15 si 14 | Diferente pentru articole intre reviziile 81 si 80 | Istoria paginii utilizator/gabym | Diferente pentru utilizator/tudorbuhnia intre reviziile 59 si 9 | Cod sursa (job #1761749)
#include <cstdio>
#include <deque>
#include <vector>
#include <iostream>
using namespace std;
int N, M, S;
vector<vector<int>> V(100001);
vector<int> sol;
deque<int> dq;
void bfs() {
sol[S] = 0;
dq.push_back(S);
int curr;
while(!dq.empty()) {
curr = dq.front();
dq.pop_front();
for(int e : V[curr]) {
if(sol[e] == -1) {
dq.push_back(e);
sol[e] = sol[curr]+1;
}
}
}
}
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d", &N, &M, &S);
sol.push_back(-1);
int fst, snd;
for(int i = 1; i <= M; i++) {
scanf("%d %d", &fst, &snd);
V[fst].push_back(snd);
sol.push_back(-1);
}
bfs();
for(int i = 1; i <= N; i++) {
printf("%d ", sol[i]);
}
return 0;
}