Pagini recente » Cod sursa (job #2955623) | Cod sursa (job #2192449) | Cod sursa (job #2192450) | Cod sursa (job #2944828) | Cod sursa (job #2606440)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
#define NMAX 100005
class Task {
std::vector<int> matrix[NMAX];
std::vector<bool> visited;
int N, M, S;
void read_input() {
std::ifstream in("bfs.in");
in >> N;
in >> M;
in >> S;
for (int i = 0; i < M; i++) {
int x;
int y;
in >> x;
in >> y;
matrix[x].push_back(y);
}
in.close();
}
void show_matrix() {
for (int i = 0; i < N; i++) {
std::cout<<i<<":";
for (int j = 0; j < matrix[i].size(); j++) {
std::cout<<matrix[i][j]<<" ";
}
std::cout<<"\n";
}
}
std::vector<int> BFS(int source) {
std::vector<int> distances(N + 1, INT32_MAX);
distances[source] = 0;
std::queue<int> queue;
queue.push(source);
visited = std::vector<bool> (N + 1, false);
while (!queue.empty()) {
auto x = queue.front();
visited[x] = true;
queue.pop();
for (auto const elem: matrix[x]) {
if (visited[elem] == false) {
queue.push(elem);
visited[elem] = true;
distances[elem] = distances[x] + 1;
}
}
}
return distances;
}
void print(std::vector<int> distances) {
std::ofstream out("bfs.out");
for (int i = 1; i <= N; i++) {
if (distances[i] == INT32_MAX) {
out<<"-1 ";
} else {
out<<distances[i]<<" ";
}
}
out<<"\n";
out.close();
return;
}
public:
void solve() {
read_input();
print(BFS(S));
}
};
int main() {
Task* task = new Task();
task->solve();
delete(task);
return 0;
}