Pagini recente » Cod sursa (job #3226189) | Cod sursa (job #2303468) | Cod sursa (job #2655422) | Cod sursa (job #3217082) | Cod sursa (job #2827873)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int nr_nodes, nr_vertices, start_node, distances[100001];
vector<int> adjancency_list[100001];
queue<int> neighbors;
void bfs_traversal(int start_node) {
neighbors.push(start_node);
while (!neighbors.empty()) {
int current_node = neighbors.front();
int current_nr_neighbors = adjancency_list[current_node].size();
neighbors.pop();
for (int i = 0; i < current_nr_neighbors; ++i) {
if (!distances[adjancency_list[current_node][i]] && adjancency_list[current_node][i] != start_node) {
distances[adjancency_list[current_node][i]] = distances[current_node] + 1;
neighbors.push(adjancency_list[current_node][i]);
}
}
}
}
void print_distances(int nr_nodes) {
for (int node = 1; node <= nr_nodes; ++node) {
if (!distances[node] && node != start_node) {
fout << "-1 ";
} else {
fout << distances[node] << " ";
}
}
}
int main() {
fin >> nr_nodes >> nr_vertices >> start_node;
int route_node, destination_node;
for (int vertice = 1; vertice <= nr_vertices; ++vertice) {
fin >> route_node >> destination_node;
adjancency_list[route_node].push_back(destination_node);
}
bfs_traversal(start_node);
print_distances(nr_nodes);
return 0;
}