Pagini recente » Cod sursa (job #2385578) | Cod sursa (job #1294981) | Cod sursa (job #1888437) | Cod sursa (job #439922) | Cod sursa (job #3252185)
#include <fstream>
#include <vector>
#define maxn 100010
int N, M, L, Start;
std::vector<int> A[maxn];
int G[maxn], Q[maxn], distances[maxn];
void BFS(int nod) {
int i, j;
for (auto idx = 1; idx <= M; ++idx) {
distances[idx] = -1;
}
L = 1;
distances[nod] = 0;
Q[L] = nod;
for (i = 1; i <= L; i++) {
for (j = 0; j < G[Q[i]]; j++) {
if (distances[A[Q[i]][j]] == -1) {
Q[++L] = A[Q[i]][j];
distances[Q[L]] = distances[Q[i]] + 1;
}
}
}
}
int main() {
auto in = std::ifstream{"bfs.in"};
auto out = std::ofstream{"bfs.out"};
in >> N >> M >> Start;
int x, y;
for (int i = 1; i <= M; i++) {
in >> x >> y;
A[x].push_back(y);
}
for (int i = 1; i <= N; i++)
G[i] = A[i].size();
BFS(Start);
for (int i = 1; i <= N; i++) {
out << distances[i] << " ";
}
out << "\n";
return 0;
}