Pagini recente » Cod sursa (job #3290875) | Cod sursa (job #1642798) | Cod sursa (job #2166695) | Cod sursa (job #2114447) | Cod sursa (job #1799565)
/* BFS pentru un graf direct
* Calculeaza distanta de la nodul sursa S la toate nodurile X;
* daca S nu este conectat cu X, atunci distanta este egala cu -1
*/
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100010;
int N, M, L, start;
vector<int> A[NMAX];
int G[NMAX], S[NMAX], dist[NMAX];
void bfs(int node) {
memset(dist, -1, sizeof(dist));
L = 1; // length of the queue
dist[node] = 0;
S[L] = node;
for (int i = 1; i <= L; i++) {
for (int j = 0; j < G[S[i]]; j++) {
if (dist[A[S[i]][j]] >= 0) continue;
S[++L] = A[S[i]][j];
dist[S[L]] = dist[S[i]] + 1;
}
}
}
int main() {
#ifndef DEBUG
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
#endif
scanf("%d %d %d", &N, &M, &start);
for (int i = 1; i <= M; i++) {
int a, b;
scanf("%d %d", &a, &b);
A[a].push_back(b);
}
for (int i = 1; i <= N; i++) {
G[i] = A[i].size();
}
bfs(start);
for (int i = 1; i <= N; i++) {
printf("%d ", dist[i]);
}
printf("\n");
}