Pagini recente » Cod sursa (job #2194672) | Cod sursa (job #806157) | Cod sursa (job #799202) | Cod sursa (job #2343972) | Cod sursa (job #2773203)
#include <fstream>
#include <vector>
#include <queue>
#include <cstdlib>
const int MAX_N = 100001;
const int MAX_M = 1000001;
int n, m, s;
std::vector<int> graph[MAX_N];
std::queue<int> queue;
int cost[MAX_N];
void read()
{
std::ifstream input("bfs.in");
input >> n >> m >> s;
int x, y;
for (int edge(0); edge < m; ++edge) {
input >> x >> y;
graph[x].push_back(y);
}
input.close();
}
void print()
{
std::ofstream output("bfs.out");
for (int vertex(1); vertex <= n; ++vertex) {
output << cost[vertex] << ' ';
}
output.put('\n');
output.close();
}
void bfs()
{
queue.push(s);
std::memset(static_cast<void*>(cost), 0xff, sizeof(cost));
cost[s] = 0;
int vertex;
while (!queue.empty()) {
vertex = queue.back();
queue.pop();
for (auto node : graph[vertex]) {
if (cost[node] == -1) {
cost[node] = cost[vertex] + 1;
queue.push(node);
}
}
}
}
int main()
{
read();
bfs();
print();
return 0;
}