Cod sursa(job #2393775)

Utilizator arcoC. Nicolae arco Data 1 aprilie 2019 00:16:24
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.82 kb
#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);
}