Cod sursa(job #1973602)

Utilizator TamasFlorin96Tamas Florin TamasFlorin96 Data 25 aprilie 2017 15:06:56
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

void floyd_warshall(std::vector<std::vector<int>> &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++)
			{
				if (graph[i][k] && graph[k][j] && (graph[i][j] > graph[i][k] + graph[k][j] || !graph[i][j]) && i != j)
					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<int>> graph{ n };

	for (size_t i = 0; i < n; i++) {
		for (size_t j = 0; j < n; j++) {
			int cost;
			in >> cost;
			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]<<' ';
		}
		out << '\n';
	}

	out.close();

	return 0;
}