Pagini recente » Cod sursa (job #1426595) | Cod sursa (job #1264587) | Cod sursa (job #2434161) | Cod sursa (job #2232544) | Cod sursa (job #1961455)
#include <fstream>
#include <vector>
#include <queue>
using std::vector;
std::ifstream in("bfs.in");
std::ofstream out("bfs.out");
vector< vector<int> > graf;
int points, paths, starter;
int bfs(int from, int to) {
std::queue<int> leeWorker;
vector<int> path = vector<int>(points, -1);
leeWorker.push(from);
path[from] = 0;
while (!leeWorker.empty()) {
int now = leeWorker.front(); leeWorker.pop();
if (now == to) return path[now];
for (int i = 0; i < graf[now].size(); i++) {
if (path[graf[now][i]] == -1) {
leeWorker.push(graf[now][i]);
path[graf[now][i]] = path[now] + 1;
}
}
}
return -1;
}
int main() {
std::ios::sync_with_stdio(false);
in >> points >> paths >> starter;
graf.resize(points);
for (int i = 0; i < paths; i++) {
int from, to;
in >> from >> to;
graf[from - 1].push_back(to - 1);
}
for (int i = 0; i < points; i++) {
out << bfs(starter - 1, i) << ' ';
}
}