Cod sursa(job #674455)

Utilizator damgoodLincan Dan damgood Data 6 februarie 2012 11:39:54
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>

#define MAXN 101

int n;
int g[ MAXN ][ MAXN ];

void read()
{
	freopen("royfloyd.in", "r", stdin);
	freopen("royfloyd.out", "w", stdout);
	
	scanf("%d ", &n);
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= n; ++j)
			scanf("%d", &g[ i ][ j ]);
}

void solve()
{
	for(int k = 1; k <= n; ++k)
		for(int i = 1; i <= n; ++i)
			for(int j = 1; j <= n; ++j)
			{
				if( i != j && g[ i ][ k ] && g[ k ][ j ]
				&& ( g[ i ][ k ] + g[ k ][ j ] < g[ i ][ j ] || g[ i ][ j ] == 0))
					g[ i ][ j ] = g[ i ][ k ] + g[ k ][ j ];
			}
}

void printResult()
{
	for(int i = 1; i <= n; ++i)
	{
		for(int j = 1; j <= n; ++j)
			printf("%d ", g[ i ][ j ]);
		printf("\n");
	}
}

int main()
{
	read();
	solve();	
	printResult();
	return 0;
}