Cod sursa(job #145827)

Utilizator vlad.maneaVlad Manea vlad.manea Data 29 februarie 2008 15:53:28
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <values.h>
#define NMax 128

int n, d[NMax][NMax], dmin[NMax][NMax], s[NMax][NMax];

void citire();
void rf();
void afis();

int main()
{
	citire();
	rf();
	afis();
	return 0;
}

void rf()
{
	int i, j, k;

	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++)
			dmin[i][j] = d[i][j] == 0? MAXLONG/2: d[i][j];

	for (k=1; k<=n; k++)
		for (i=1; i<=n; i++)
			for (j=1; j<=n; j++)
				if ( dmin[i][k]+dmin[k][j] < dmin[i][j] )
					dmin[i][j] = dmin[i][k] + dmin[k][j];
}

void afis()
{
	int i, j;

	for (i=1; i<=n; i++)
	{
		for (j=1; j<n; j++)
			printf( "%d ", dmin[i][j] == MAXLONG/2? 0: dmin[i][j] );
		printf( "%d\n", dmin[i][j] == MAXLONG/2? 0: dmin[i][j] );
	}

	for (i=1; i<=n; i++)
	{
		for (j=1; j<n; j++)
			printf( "%d ", s[i][j] );
		printf( "%d\n", s[i][j] );
	}
}
void citire()
{
	int i, j;
	freopen( "royfloyd.in", "rt", stdin );
	freopen( "royfloyd.out", "wt", stdout );

	scanf( "%d", &n );
	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++)
			scanf( "%d", &d[i][j] );
}