Cod sursa(job #538580)

Utilizator cristian.utaUta Cristian cristian.uta Data 21 februarie 2011 18:24:52
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>

FILE *in, *out;
int** mat;
int n;

void citire()
{
	in = fopen("royfloyd.in","r");
	out = fopen("royfloyd.out","w");
	
	fscanf(in,"%d",&n);
	
	mat=new int *[n];
	for (int i = 0; i < n; i++)
		mat[i] = new int [n];

	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			fscanf(in,"%d",&mat[i][j]);
}

void afisare()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			fprintf(out,"%d ",mat[i][j]);
	fprintf(out,"\n");
	}
}

void royfloyd()
{
	int i, j, k;
	for ( k = 0; k < n; k++)
		for ( i = 0; i < n ; i++)
			for ( j = 0; j < n; j++)
				if ( mat[i][k] && mat[k][j] && (mat[i][j] > mat[i][k] + mat[k][j] || !mat[i][j]) && i!=j )
					mat[i][j] = mat[i][k] + mat[k][j];
}

int main()
{
	citire();

	royfloyd();

	afisare();

	fclose(in);
	fclose(out);

	return 0;
}