Cod sursa(job #156365)

Utilizator plastikDan George Filimon plastik Data 12 martie 2008 14:58:19
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>
#include <limits.h>
#define NMAX 100
#define INF INT_MAX

int n;
int A[NMAX][NMAX];

int main() {

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

	scanf("%d", &n);
	int i, j;
	for (i = 0; i < n; ++ i)
		for (j = 0; j < n; ++ j) {
			scanf("%d", &A[i][j]);
			if (A[i][j] == 0)
				A[i][j] = INF;
		}

	int k;
	for (k = 0; k < n; ++ k)
		for (i = 0; i < n; ++ i)
			for (j = 0; j < n; ++ j) {
				if (A[i][k] == INF || A[k][j] == INF)
					continue;
				if (A[i][j] > A[i][k] + A[k][j])
					A[i][j] = A[i][k] + A[k][j];
			}

	for (i = 0; i < n; ++ i) {
		for (j = 0; j < n; ++ j)
			if (A[i][j] == INF || i == j)
				printf("0 ");
			else
				printf("%d ", A[i][j]);
		printf("\n");
	}

	return 0;
}