Pagini recente » Borderou de evaluare (job #1929521) | Borderou de evaluare (job #1309200) | Cod sursa (job #1827461) | Cod sursa (job #690868) | Cod sursa (job #3316897)
#include <iostream>
#include <vector>
#include <queue>
#include <cstdio>
int main() {
if (!freopen("bfs.in", "r", stdin)) {
}
if (!freopen("bfs.out", "w", stdout)) {
}
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int N, M, S;
std::cin >> N >> M >> S;
std::vector<std::vector<int>> adj(N + 1);
for (int i = 0; i < M; ++i) {
int x, y;
std::cin >> x >> y;
adj[x].push_back(y); // Arc orientat de la x la y
}
std::vector<int> dist(N + 1, -1);
std::queue<int> q;
dist[S] = 0;
q.push(S);
while (!q.empty()) {
int u = q.front();
q.pop();
// Parcurgem toti vecinii nodului curent u
for (int v : adj[u]) {
// Daca vecinul v nu a fost vizitat inca
if (dist[v] == -1) {
// Setam distanta si il adaugam in coada
dist[v] = dist[u] + 1;
q.push(v);
}
}
}
for (int i = 1; i <= N; ++i) {
std::cout << dist[i] << (i == N ? "" : " ");
}
std::cout << "\n";
return 0;
}