Pagini recente » Cod sursa (job #1153247) | Profil xxxy | Cod sursa (job #961885) | Cod sursa (job #1651142) | Cod sursa (job #2844814)
#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct FloydWarshall
{
// all costs are != 0
// matrix[i][j] = 0 -> no path from i to j, any i, j
FloydWarshall()
{
}
void run_alg(int matrix_size, vector<vector<T>> &matrix)
{
int i, j, k;
for (k = 1; k <= matrix_size; k++)
for (i = 1; i <= matrix_size; i++)
for (j = 1; j <= matrix_size; j++)
if (matrix[i][k] && matrix[k][j] && (matrix[i][j] > matrix[i][k] + matrix[k][j] || !matrix[i][j]) && i != j)
matrix[i][j] = matrix[i][k] + matrix[k][j];
}
void printResult(int matrix_size, vector<vector<T>> &matrix)
{
int i, j;
for (i = 1; i <= matrix_size; i++)
{
for (j = 1; j <= matrix_size; j++)
cout << matrix[i][j] << " ";
cout << "\n";
}
}
};
void solve()
{
int n;
int i, j;
freopen("royfloyd.in", "r", stdin);
freopen("royfloyd.out", "w", stdout);
cin >> n;
vector<vector<int>> a(n + 1);
for (i = 1; i <= n; i++)
{
a[i].push_back(0);
for (j = 1; j <= n; j++)
{
int x;
cin >> x;
a[i].push_back(x);
}
}
FloydWarshall<int> fw;
fw.run_alg(n, a);
fw.printResult(n, a);
}
int32_t main()
{
solve();
return 0;
}