Pagini recente » Cod sursa (job #1969527) | Cod sursa (job #1548750) | Cod sursa (job #3252219) | Cod sursa (job #1802461) | Cod sursa (job #2244264)
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <algorithm>
#include <vector>
#include <stack>
#include <set>
#include <assert.h>
#include <queue>
#include <chrono>
using LL = long long;
using ULL = int long long;
const std::string _problemName = "bfs";
namespace std {
std::ifstream fin(_problemName + ".in");
std::ofstream fout(_problemName + ".out");
}
#define USE_FILES
#ifdef USE_FILES
#define cin fin
#define cout fout
#endif
using graph_t = std::vector< std::vector<int> >;
const int UNVISITED = -1;
std::vector<int> computeMinDistances(const graph_t& graph, int source) {
std::vector<int> distances(graph.size(), UNVISITED);
std::queue<int> queue;
queue.push(source);
distances[source] = 0;
while (!queue.empty()) {
int node = queue.front();
queue.pop();
for (auto neighbour : graph[node]) {
if (distances[neighbour] == UNVISITED) {
distances[neighbour] = distances[node] + 1;
queue.push(neighbour);
}
}
}
return distances;
}
int main() {
int n, m, s;
std::cin >> n >> m >> s;
graph_t graph(n);
while (m--) {
int a, b;
std::cin >> a >> b;
--a, --b;
graph[a].push_back(b);
}
auto ans = computeMinDistances(graph, s);
for (auto i : ans) {
std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}