Pagini recente » Cod sursa (job #440447) | Cod sursa (job #2332281) | Cod sursa (job #2044237) | Cod sursa (job #475851) | Cod sursa (job #1973648)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
const long 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;
}