Cod sursa(job #550848)

Utilizator sebii_cSebastian Claici sebii_c Data 9 martie 2011 22:53:49
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>

int N;
int path[100][100];

void FloydWarshall(int path[100][100])
{
	int i, j, k;
	for (k=0; k<N; ++k)
		for (i=0; i<N; ++i)
			for (j=0; j<N; ++j)
				if (path[i][j] > (path[i][k]+path[k][j]))
					path[i][j] = path[i][k] + path[k][j];
}

int main()
{
	int i, j;
	FILE *fin = fopen("royfloyd.in", "r");
	FILE *fout = fopen("royfloyd.out", "w");
	fscanf(fin, "%d", &N);
	for (i=0; i<N; ++i)
		for (j=0; j<N; ++j)
			fscanf (fin, "%d", &path[i][j]);
	fclose(fin);
	for (i=0; i<N; ++i)
		for (j=0; j<N; ++j)
			if (i!=j && !path[i][j])
				path[i][j] = 1001;
	FloydWarshall(path);
	for (i=0; i<N; ++i) {
		for (j=0; j<N; ++j)
			if (path[i][j] == 1001)
				fprintf(fout, "0 ");
			else
				fprintf(fout, "%d ", path[i][j]);
		fprintf(fout, "\n");
	}
	fclose(fout);
	return 0;
}