Cod sursa(job #689453)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 24 februarie 2012 15:22:05
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>

using namespace std;

#define maxN 105

int N , a[maxN][maxN];

int main ()
{
	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" , &a[i][j]);
	
	
	for (int k = 1 ; k <= N ; ++k)
		for (int i = 1 ; i <= N ; ++i)
			for (int j = 1 ; j <= N ; ++j)
			{
				if (i == j) continue;
				
				if (a[i][k] == 0 || a[k][j] == 0) continue;
				
				if (a[i][k] + a[k][j] < a[i][j])
					a[i][j] = a[i][k] + a[k][j];
			}
	
	for (int i = 1 ; i <= N ; ++i)
	{
		for (int j = 1 ; j <= N ; ++j)
			printf ("%d " , a[i][j]);
		
		printf ("\n");
	}

	
	return 0;
}