Pagini recente » Cod sursa (job #2509685) | Cod sursa (job #2393823) | Cod sursa (job #2577498) | Cod sursa (job #2670391) | Cod sursa (job #3252174)
#include <fstream>
#include <vector>
#define maxn 100010
int N, M, L, Start;
std::vector<int> A[maxn];
int G[maxn], S[maxn], Cost[maxn];
void BFS(int nod) {
int i, j;
std::memset(Cost, -1, sizeof(Cost));
L = 1;
Cost[nod] = 0;
S[L] = nod;
for (i = 1; i <= L; i++) {
for (j = 0; j < G[S[i]]; j++) {
if (Cost[A[S[i]][j]] == -1) {
S[++L] = A[S[i]][j];
Cost[S[L]] = Cost[S[i]] + 1;
}
}
}
}
int main() {
auto in = std::ifstream{"bfs.in"};
auto out = std::ofstream{"bfs.out"};
int i, x, y;
in >> N >> M >> Start;
for (i = 1; i <= M; i++) {
in >> x >> y;
A[x].push_back(y);
}
for (i = 1; i <= N; i++)
G[i] = A[i].size();
BFS(Start);
for (i = 1; i <= N; i++) {
out << Cost[i] << " ";
}
out << "\n";
return 0;
}