Pagini recente » Cod sursa (job #2653312) | Cod sursa (job #1148823) | Cod sursa (job #362446) | Cod sursa (job #2065571) | Cod sursa (job #3358425)
// Floyd-Warshall Algorithm
//
// Given a graph where all edges have a non-negative weight, compute the
// shortest distances for all pair of vertices.
//
// Complexity: O(n^3)
#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> adj;
void floyd_warshall()
{
for (int i = 0; i < n; i++)
adj[i][i] = 0;
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (adj[i][k] < INT_MAX && adj[k][j] < INT_MAX)
adj[i][j] = min(adj[i][j], adj[i][k] + adj[k][j]);
}
}
}
}
int main()
{
freopen("royfloyd.out", "r", stdin);
freopen("royfloyd.in", "w", stdout);
cin >> n;
adj.resize(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int x;
cin >> x;
adj[i][j] = (x == 0 && i != j) ? INT_MAX : x;
}
}
floyd_warshall();
for (auto &line : adj) {
for (int num : line)
cout << (num == INT_MAX ? 0 : num) << ' ';
cout << '\n';
}
return 0;
}