Pagini recente » Cod sursa (job #2432033) | Statistici Silas Codruta (balanta) | Cod sursa (job #2833939) | Monitorul de evaluare | Cod sursa (job #896976)
Cod sursa(job #896976)
#include <fstream>
#include <vector>
#include <iostream>
using std::cout;
using std::vector;
const int inf = 1000000;
std::ifstream in("royfloyd.in");
std::ofstream out("royfloyd.out");
struct edge
{
int s,n,w;
};
int N;
vector<edge> b;
vector< vector<int> > dist;
vector<int> solve(int nod)
{
vector <int> d;
d.resize(N+1,inf);
d[nod] = 0;
int k = 1;
while (k)
{
k = 0;
for (int i = 0; i < b.size(); ++i)
if ( d[ b[i].s ] + b[i].w < d[ b[i].n ] ) {
d[ b[i].n ] = d[ b[i].s ] + b[i].w;
++k;
}
}
for (int i = 1; i < d.size(); ++i)
if ( d[i] == inf ) d[i] = 0;
return d;
}
int main()
{
in >> N;
for (int i = 1; i <= 5; ++i)
for (int j = 1; j <= 5; ++j)
{
int t1; in >> t1;
if (t1) {
edge temp;
temp.s = i; temp.n = j; temp.w = t1;
b.push_back(temp);
}
}
for (int i = 1; i <= N; ++i)
dist.push_back( solve(i) );
for (int i = 0; i < dist.size(); ++i) {
if (i) out << '\n';
for (int j = 1; j < dist[i].size(); ++j)
out << dist[i][j] << " ";
}
in.close();
out.close();
return 0;
}