Cod sursa(job #1641203)

Utilizator StanescuVictorStanescu Victor Laurentiu StanescuVictor Data 8 martie 2016 21:39:47
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
// Infoarena DFS

#include <fstream>
#include <vector>
#include <queue>

std::vector<std::vector<int>> graph;
std::vector<bool> visited;
int vertices, edges, start;

std::vector<int> getRoadDistance(int vertex)
{
	if (vertex < 1 || vertex > vertices)
		return std::vector<int>();

	std::queue<int> queue;
	std::vector<int> roadDistance(vertices + 1, -1);

	queue.push(vertex);
	visited[vertex] = true;
	roadDistance[vertex] = 0;

	while (!queue.empty())
	{
		int element = queue.front();

		for (int i = 0; i < graph[element].size(); i++)
			if (!visited[graph[element][i]])
			{
				roadDistance[graph[element][i]] = roadDistance[element] + 1;
				queue.push(graph[element][i]);
				visited[graph[element][i]] = true;
			}
		queue.pop();
	}

	return roadDistance;
}

int main()
{
	std::ifstream f("sortaret.in");
	f >> vertices >> edges >> start;
	graph.resize(vertices + 1);
	visited.resize(vertices + 1, false);

	for (int i = 0; i < edges; i++)
	{
		int x, y;
		f >> x >> y;
		graph[x].push_back(y);
	}

	std::vector<int> rD = getRoadDistance(start);
	std::ofstream g("sortaret.out");

	for (int i = 1; i < rD.size(); i++)
		g << rD[i] << " ";

	return 0;
}