Pagini recente » Cod sursa (job #2294678) | Cod sursa (job #659424) | Cod sursa (job #892043) | Cod sursa (job #756081) | Cod sursa (job #2207605)
#include <bits/stdc++.h>
using namespace std;
template <typename T>
struct Floyd{
vector<vector<pair<int, T>>> &G;
vector<vector<T>> M;
size_t n;
int const oo = 1000000000;
Floyd(decltype(G) G) : G(G), n(G.size()) {};
void build(){
M.resize(n + 1);
for(int i = 0; i <= n; i++) {
M[i].resize(n + 1, oo);
M[i][i] = 0;
}
for(int i = 0; i < G.size(); i++)
for(auto it : G[i])
M[i][it.first] = it.second;
for(int k = 0; k <= n; k++)
for(int i = 0; i <= n; i++)
for(int j = 0; j <= n; j++)
M[i][j] = min(M[i][j], M[i][k] + M[k][j]);
}
};
unique_ptr<vector<vector<pair<int, int>>>> G;
int n;
void Read()
{
cin>>n;
G = make_unique<vector<vector<pair<int, int>>>>(n+1);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
int x;
cin>>x;
if(x)
G->at(i).emplace_back(j, x);
}
}
void Solve()
{
unique_ptr<Floyd<int>> F = make_unique<Floyd<int>>(*G);
F->build();
for(int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
cout << F->M[i][j] << " ";
cout << "\n";
}
}
int main(){
freopen("royfloyd.in", "r", stdin);
freopen("royfloyd.out", "w", stdout);
ios_base::sync_with_stdio(false);
Read();
Solve();
return 0;
}