Cod sursa(job #1973644)

Utilizator TamasFlorin96Tamas Florin TamasFlorin96 Data 25 aprilie 2017 17:10:42
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

const int INF = std::numeric_limits<long>::max();

void floyd_warshall(std::vector<std::vector<long>> &graph)
{
	size_t vertices = graph.size();

	for (size_t k = 0; k < vertices; k++)
	{
		for (size_t i = 0; i < vertices; i++)
		{
			for (size_t j = 0; j < vertices; j++)
			{
				graph[i][j] = std::min(graph[i][j], graph[i][k] + graph[k][j]);
			}
		}
	}
}

int main(void)
{
	std::ifstream in("royfloyd.in");

	size_t n;
	in >> n;

	std::vector<std::vector<long>> graph{ n };

	for (size_t i = 0; i < n; i++) {
		for (size_t j = 0; j < n; j++) {
			long cost;
			in >> cost;

			if (i != j && cost == 0)
				cost = INF;

			graph[i].push_back(cost);
		}
	}

	in.close();

	floyd_warshall(graph);

	std::ofstream out("royfloyd.out");

	for (size_t i = 0; i < n; i++) {
		for (size_t j = 0; j < n; j++) {
			out << ((graph[i][j]==INF) ? 0 : graph[i][j])<<' ';
		}
		out << '\n';
	}

	out.close();

	return 0;
}