Pagini recente » Istoria paginii utilizator/jyuviolegrace | Cod sursa (job #612928) | Cod sursa (job #1660469) | Cod sursa (job #439839) | Cod sursa (job #2767239)
#include <iostream>
#include <fstream>
#include <list>
#include <queue>
const int NMAX = 100001;
std::list<int> adj[NMAX];
int visited[NMAX], distance[NMAX];
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
void bfs(int source) {
std::queue<int> queue;
visited[source] = 1;
distance[source] = 0;
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] == 0) {
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);
}
for (int i = 1; i <= n; ++i) {
distance[i] = -1;
}
bfs(s);
for (int i = 1; i <= n; ++i) {
fout << distance[i] << " ";
}
fin.clear();
fout.close();
return 0;
}