Pagini recente » Cod sursa (job #1550911) | Cod sursa (job #203443) | Cod sursa (job #845318) | Cod sursa (job #2629283) | Cod sursa (job #1704996)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
// #include "my_vector_io.h"
int N, M, S;
using Graph = std::vector<std::vector<int> >;
Graph graph;
std::vector<int> distances;
void bfs(int start) {
std::queue<int> q;
distances[start] = 0;
q.push(start);
while (!q.empty()) {
int curr_node = q.front();
for (int neigh : graph[curr_node]) {
if (distances[neigh] == -1) {
distances[neigh] = distances[curr_node] + 1;
q.push(neigh);
}
}
q.pop();
}
}
int main() {
std::ifstream f("bfs.in");
std::ofstream g("bfs.out");
f >> N >> M >> S;
graph.resize(N+1);
distances.resize(N+1);
for (int i = 1; i <= N; ++i) {
distances[i] = -1;
}
for (int i = 0; i < M; ++i) {
int from, to;
f >> from >> to;
graph[from].push_back(to);
}
bfs(S);
for (int i = 1; i <= N; i++) {
g << distances[i] << " ";
}
return 0;
}