Cod sursa(job #478367)

Utilizator a.stanciuStanciu Adrian a.stanciu Data 18 august 2010 11:32:23
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#include <stdlib.h>

#define INF 100000

int main()
{
	int n, **mp, i, j, k, aux;
	FILE *f, *g;

	f = fopen("royfloyd.in", "r");
	g = fopen("royfloyd.out", "w");

	fscanf(f, "%d", &n);
	
	mp = (int **)malloc(sizeof(int *) * n);
	for (i = 0; i < n; i++)
		mp[i] = (int *)malloc(sizeof(int) * n);

	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++)
			fscanf(f, "%d", &mp[i][j]);

	for (i = 0; i < n; i++)
		for (j = 0; j < n; j++)
			for (k = 0; k < n; k++)
			{
				aux = mp[i][k] + mp[k][j];
				if ((mp[i][j] > aux || (mp[i][j] == 0 && i != j)) && mp[i][k] != 0 && mp[k][j] != 0) 
					mp[i][j] = aux;
			}

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
			fprintf(g, "%d ", mp[i][j]);
		fprintf(g, "\n");
	}

	fclose(f);
	fclose(g);

	return 0;
}