Pagini recente » Cod sursa (job #1468477) | Cod sursa (job #383454) | Cod sursa (job #2585624) | Cod sursa (job #83095) | Cod sursa (job #2772641)
#include <fstream>
#define INF 0
using namespace std;
int **createMatrix(int l, int c) {
int **m = new int *[l];
for (int i = 0; i < l; i++)
m[i] = new int[c];
return m;
}
void freeMatrix(int **m, int l) {
for (int i = 0; i < l; i++)
delete[] m[i];
delete[] m;
}
void copyMatrix(int **src, int **dest, int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
dest[i][j] = src[i][j];
}
void findRoads(int **w, int **roads, int n) {
int i, j, k;
int **d = w;
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if ((i ^ j) && d[i][k] != INF && d[k][j] != INF) {
// i si j nu sunt acelasi nod si exista drum de la i la k
// si de la k la j
if (d[i][k] + d[k][j] < d[i][j] || d[i][j] == INF)
d[i][j] = d[i][k] + d[k][j];
}
}
}
}
copyMatrix(d, roads, n);
}
int main(void) {
ifstream in("royfloyd.in");
ofstream out("royfloyd.out");
int N, i, j;
in >> N;
int **w = createMatrix(N, N);
int **roads = createMatrix(N, N);
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
in >> w[i][j];
roads[i][j] = 0;
}
}
findRoads(w, roads, N);
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
out << roads[i][j] << ' ';
}
out << '\n';
}
freeMatrix(w, N);
freeMatrix(roads, N);
in.close();
out.close();
return 0;
}