Cod sursa(job #1961455)

Utilizator k.bruenDan Cojocaru k.bruen Data 11 aprilie 2017 09:43:55
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#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) << ' ';
	}
}