Pagini recente » Cod sursa (job #447284) | Cod sursa (job #336900) | Cod sursa (job #73370) | Cod sursa (job #2291781) | Cod sursa (job #521183)
Cod sursa(job #521183)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int n,
**matrix;
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;
/* Floyd-Warshall
* initializing result matrix with INT_MAX
*/
for (k = 0; k < n; ++k)
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
if (matrix[k][j] && matrix[i][k] && ((matrix[i][j] > matrix[i][k] + matrix[k][j])|| !matrix[i][j]) && i!=j)
matrix[i][j] = matrix[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 ", matrix[i][j]);
printf("\n");
}
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;
}