Pagini recente » Cod sursa (job #2381236) | Cod sursa (job #422241) | Cod sursa (job #895171) | Cod sursa (job #3145700) | Cod sursa (job #2660039)
#include <iostream>
#include <fstream>
#include <queue>
#include <unordered_set>
const int NMAX = 1e5;
int n, m, s;
int dist[1 + NMAX];
std::unordered_set<int> adj[1 + NMAX];
void read() {
std::ifstream in("bfs.in");
in >> n >> m >> s;
int x, y;
while (in >> x >> y)
adj[x].insert(y);
in.close();
}
int main() {
read();
std::queue<std::pair<int, int>> bfs;
bfs.push({s, 1});
while (!bfs.empty()) {
auto fr = bfs.front();
bfs.pop();
dist[fr.first] = fr.second;
for (int i = 1; i <= n; ++i) {
if (adj[fr.first].count(i) && (dist[i] == 0 || dist[i] > fr.second + 1))
bfs.push({i, fr.second + 1});
}
}
std::ofstream out("bfs.out");
for (int i = 1; i <= n; ++i)
out << dist[i] - 1 << ' ';
out.close();
return 0;
}