Cod sursa(job #2827873)

Utilizator george_buzasGeorge Buzas george_buzas Data 6 ianuarie 2022 15:16:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#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;
}