Pagini recente » Cod sursa (job #176638) | Cod sursa (job #267352) | Cod sursa (job #2056505) | Cod sursa (job #2315539) | Cod sursa (job #2393775)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <limits.h>
typedef unsigned int uint;
int **getEmpty(int n);
void destroy(int **matrix, int n);
void display(int **matrix, int n);
int main(void)
{
FILE *in = fopen("royfloyd.in", "r");
FILE *out = fopen("royfloyd.out", "w");
if(in != NULL && out != NULL)
{
int n;
fscanf(in, "%d%*c", &n);
int **adia = getEmpty(n + 1);
int **rf = getEmpty(n + 1);
int i = 1;
for(; i <= n; i++)
{
int j = 1;
for(; j <= n; j++)
{
fscanf(in, "%d%*c", &adia[i][j]);
}
}
i = 0;
for(; i <= n; i++)
{
memcpy(rf[i], adia[i], sizeof(int) * (n + 1));
}
int k = 1;
for(; k <= n; k++)
{
i = 1;
for(; i <= n; i++)
{
int j = 1;
for(; j <= n; j++)
{
if(rf[i][j] > rf[i][k] + rf[j][k])
{
rf[i][j] = rf[i][k] + rf[j][k];
}
}
}
}
i = 1;
for(; i <= n; i++)
{
int j = 1;
for(; j <= n; j++)
{
fprintf(out, "%d ", rf[i][j]);
}
fprintf(out, "\n");
}
destroy(rf, n);
destroy(adia, n);
fclose(in);
fclose(out);
}
else
{
printf("file error\n");
}
return 0;
}
void display(int **matrix, int n)
{
int i = 1;
for(; i <= n; i++)
{
int j = 1;
for(; j <= n; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int **getEmpty(int n)
{
int **matrix = malloc(sizeof(int *) * n);
if(matrix != NULL)
{
int i = 0;
for(; i < n; i++)
{
matrix[i] = calloc(n, sizeof(int));
if(matrix[i] == NULL)
{
printf("failed to init\n");
exit(EXIT_FAILURE);
}
}
return matrix;
}
return NULL;
}
void destroy(int **matrix, int n)
{
int i = 0;
for(; i < n; i++)
{
free(matrix[i]);
}
free(matrix);
}