Cod sursa(job #146529)

Utilizator andrei_infoMirestean Andrei andrei_info Data 1 martie 2008 20:58:20
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#include <stdlib.h>

#define MAX 100
#define INF 99999999

long G[MAX][MAX], N;

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

int main()
{
	freopen("royfloyd.in", "r", stdin);
	freopen("royfloyd.out", "w", stdout);

	scanf("%ld", &N);

	int i,j;
	for (i = 0; i<N; i++)
		for(j=0; j<N; j++)
		{
			scanf("%ld", &G[i][j]);
			if ( !G[i][j] )
				G[i][j] = INF;
		}

	solve();

	for ( i = 0; i<N; i++, printf("\n") )
		for ( j =0; j<N; j++)
			if ( G[i][j] >= INF || i == j )
				printf("0 ");
			else
				printf("%ld ", G[i][j]);
	return 0;
}