Cod sursa(job #143323)

Utilizator filipbFilip Cristian Buruiana filipb Data 26 februarie 2008 12:22:51
Problema Floyd-Warshall/Roy-Floyd Scor Ascuns
Compilator cpp Status done
Runda Marime 0.62 kb
#include <stdio.h>
#include <assert.h>

#define NMax 128
#define FOR(i, a, b) for (i = a; i <= b; ++i) 
#define minim(a, b) ((a < b) ? a : b)

int N, D[NMax][NMax];

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

	scanf("%d", &N);
	assert(1 <= N && N <= 100);
	FOR (i, 1, N)
		FOR (j, 1, N)
		{
			scanf("%d", &D[i][j]);
			assert(1 <= D[i][j] && D[i][j] <= 1000);
		}
	
	FOR (k, 1, N)
		FOR (i, 1, N)
			FOR (j, 1, N)
				D[i][j] = minim(D[i][j], D[i][k] + D[k][j]);	
	
	FOR (i, 1, N)
	{
		FOR (j, 1, N)
			printf("%d ", D[i][j]);
		printf("\n");
	}
	
	return 0;
}