Cod sursa(job #145264)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 28 februarie 2008 17:31:08
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>

const long MAX = 111;
long i,j,k,n;
long A[MAX][MAX];

inline long min(long a, long b) { return a<b ? a : b; }

int main() {
	freopen("royfloyd.in", "r", stdin);
	scanf("%ld", &n);
	for (i=1; i<=n; ++i)
		for (j=1; j<=n; ++j)
			scanf("%ld", A[i]+j);
	fclose(stdin);
	
	for (k=1; k<=n; ++k)
		for (i=1; i<=n; ++i)
			for (j=1; j<=n; ++j)
				if ( i!=j && A[i][k] && A[k][j] ) {
					if ( A[i][j] ) 
						A[i][j] = min(A[i][j], A[i][k]+A[k][j]);
					else
						A[i][j] = A[i][k] + A[k][j];
				}

	freopen("royfloyd.out", "w", stdout);
	for (i=1; i<=n; ++i) {
		for (j=1; j<=n; ++j)
			printf("%ld ", A[i][j]);
		printf("\n");
	}
	return 0;
}