Pagini recente » Cod sursa (job #2423090) | Cod sursa (job #246961) | Cod sursa (job #2482946) | Cod sursa (job #2332984) | Cod sursa (job #2767238)
#include <iostream>
#include <fstream>
#include <list>
#include <queue>
const int NMAX = 100009;
std::list<int> adj[NMAX];
int visited[NMAX];
int distance[NMAX];
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
void bfs(int source) {
visited[source] = 1;
distance[source] = 0;
std::queue<int> queue;
queue.push(source);
while (!queue.empty()) {
int front = queue.front();
queue.pop();
for (auto it = adj[front].begin(); it != adj[front].end(); ++it) {
if (!visited[*it]) {
visited[*it] = 1;
distance[*it] = distance[front] + 1;
queue.push(*it);
}
}
}
}
int main(void) {
int n, m ,s;
fin >> n >> m >> s;
for (int i = 1; i <= m; ++i) {
int u, v;
fin >> u >> v;
adj[u].push_back(v);
}
bfs(s);
for (int i = 1; i <= n; ++i) {
if (visited[i] == 0) {
fout << -1 << " ";
} else {
fout << distance[i] << " ";
}
}
fin.clear();
fout.close();
return 0;
}