Pagini recente » Cod sursa (job #972096) | Cod sursa (job #1318256) | PreOJI 2017 Clasament | Cod sursa (job #940953) | Cod sursa (job #521167)
Cod sursa(job #521167)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int n,
**matrix,
**result;
void load_data()
{
int i, j;
scanf("%d", &n);
matrix = malloc(n*sizeof(int*));
matrix[0] = malloc(n*n*sizeof(int));
for (i = 1; i < n; ++i)
matrix[i] = matrix[i-1] + n;
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
scanf("%d", &matrix[i][j]);
}
void process_data()
{
int i, j, k;
result = malloc(n*sizeof(int*));
result[0] = malloc(n*n*sizeof(int));
for (i = 1; i < n; ++i)
result[i] = result[i-1] + n;
/* Floyd-Warshall
* initializing result matrix with INT_MAX
*/
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
if (i == j)
result[i][j] = 0;
else
result[i][j] = INT_MAX / 2;
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
for (k = 0; k < n; ++k)
if (result[i][j] > result[i][k] + matrix[k][j])
result[i][j] = result[i][k] + matrix[k][j];
}
void print_data()
{
int i, j;
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
printf("%d ", result[i][j]);
printf("\n");
}
free(result[0]);
free(result);
free(matrix[0]);
free(matrix);
}
int main()
{
freopen("royfloyd.in", "r", stdin);
freopen("royfloyd.out", "w", stdout);
load_data();
process_data();
print_data();
return 0;
}