Cod sursa(job #396053)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 14 februarie 2010 14:00:44
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>
#define INFINIT 1000000000
#define N 100

int c[N + 1][N + 1], n;

void citeste()
{
	FILE* fi = fopen("royfloyd.in", "r");
	int i, j, x;
	fscanf(fi, "%d", &n);
	for(i = 1; i <= n; ++i)
	{
		for(j = 1; j <= n; ++j)
		{
			fscanf(fi, "%d", &x);
			c[i][j] = (x ? x : INFINIT);
		}
	}
	fclose(fi);
}

void fw()
{
	int i, j, k;
	for(k = 1; k <= n; ++k)
	{
		for(i = 1; i <= n; ++i)
		{
			for(j = 1; j <= n; ++j)
			{
				if(i == j || k == i || k == j) continue;
				if(c[i][j] > c[i][k] + c[k][j]) 
					c[i][j] = c[i][k] + c[k][j];
			}
		}
	}
}

void scrie()
{
	FILE* fo = fopen("royfloyd.out", "w");
	int i, j;
	for(i = 1; i <= n; ++i)
	{
		for(j = 1; j <= n; ++j)
		{
			fprintf(fo, "%d ", c[i][j] == INFINIT ? 0 : c[i][j]);
		}
		fprintf(fo, "\n");
	}
	fclose(fo);
}

int main()
{
	citeste();
	fw();
	scrie();
	return 0;
}