Pagini recente » Cod sursa (job #360263) | Cod sursa (job #1451919) | Cod sursa (job #646716) | Cod sursa (job #453942) | Cod sursa (job #2605939)
#define fisier "ULTRA"
#include <fstream>
std::ifstream in(fisier ".in");
std::ofstream out(fisier ".out");
const int
N = 100,
VAL = 1000,
INF = N * VAL;
int n, cost[N][N]; // __cost_min[100][100];
#include <set>
std::set<int> _parcurse;
int _cost_min(int a, int b)
{
if (_parcurse.find(a) != _parcurse.end())
return INF;
_parcurse.emplace(a);
if (a == b)
return 0;
int rt = INF;
for (int j = 0; j < n; j++)
if (cost[a][j])
rt = std::min(rt, cost[a][j] + _cost_min(j, b));
return rt;
}
inline int cost_min(int a, int b)
{
int cost = _cost_min(a, b);
_parcurse.clear();
return cost == INF? 0: cost;
}
int main()
{
in >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
in >> cost[i][j];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
out << cost_min(i, j) << ' ';
out << '\n';
}
}