Pagini recente » Cod sursa (job #212805) | Cod sursa (job #1043311) | Cod sursa (job #380101) | Cod sursa (job #2426193) | Cod sursa (job #2207606)
#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]);
}
};
vector<vector<pair<int, int>>> *G;
int n;
void Read()
{
cin>>n;
G = new 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()
{
Floyd<int> *F = new 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";
}
delete F;
delete G;
}
int main(){
freopen("royfloyd.in", "r", stdin);
freopen("royfloyd.out", "w", stdout);
ios_base::sync_with_stdio(false);
Read();
Solve();
return 0;
}