Pagini recente » Cod sursa (job #957437) | Cod sursa (job #2940977) | Cod sursa (job #1861483) | Cod sursa (job #29673) | Cod sursa (job #1451787)
#include <fstream>
#define NMax 110
#define INF 1000000000
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
int nodes, edges, distances[NMax][NMax], inter[NMax][NMax];
int getmin(int a, int b)
{
if (a < b)
return a;
return b;
}
void recons(int i, int j)
{
if (inter[i][j] == 0)
g << i << " " << j<<"\n";
else {
recons(i, inter[i][j]);
recons(inter[i][j], j);
}
}
int main()
{
f >> nodes;
int n1 = 0, n2 = 0;
for (int i = 1; i <= nodes; i++) {
for (int j = 1; j <= nodes; j++) {
f >> distances[i][j];
if (!distances[i][j])
distances[i][j] = INF;
}
}
for (int k = 1; k <= nodes; k++) {
for (int i = 1; i <= nodes; i++) {
for (int j = 1; j <= nodes; j++) {
if (i == j)
continue;
distances[i][j] = getmin(distances[i][j], distances[i][k] + distances[k][j]);
if (distances[i][j] == distances[i][k] + distances[k][j])
inter[i][j] = k;
}
}
}
for (int i = 1; i <= nodes; i++)
for (int j = 1; j <= nodes; j++)
if (distances[i][j] == INF)
distances[i][j] = 0;
for (int i = 1; i <= nodes; i++) {
for (int j = 1; j <= nodes; j++)
g << distances[i][j] << " ";
g << "\n";
}
recons(1, 4);
return 0;
}