Cod sursa(job #642961)

Utilizator andreipnAndrei Petre andreipn Data 2 decembrie 2011 17:28:33
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>

#define FOR(i, a, b)	for (i = a; i < b; ++i)
#define HIGHER(a, b)	((a > b) || !a)

int N, P[100][100];

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

	scanf("%d", &N);
	int i, j;
	FOR (i, 0, N)
		FOR (j, 0, N)
			scanf("%d", &P[i][j]);
}

void royfloyd() {
	int i, j, k;

	FOR (k, 0, N)
		FOR (i, 0, N)
			FOR (j, 0, N) {
				if ( i == j )
					continue;
				if ( HIGHER(P[i][j], P[i][k] + P[k][j]) && P[i][k] && P[j][k] )
					P[i][j] = P[i][k] + P[k][j];
			}
}

void print() {
	int i, j;
	FOR(i, 0, N) {
		FOR(j, 0, N)
			printf("%d ", P[i][j]);
		putchar('\n');
	}
}

int main() {
	init();
	royfloyd();
	print();
	return 0;
}