Cod sursa(job #1118285)

Utilizator andrici_cezarAndrici Cezar andrici_cezar Data 24 februarie 2014 09:39:05
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>

int N, A[101][101];

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) {
			if (i == k) continue;
			for (int j = 1; j <= N; ++j) {
				if (i == j || k == j) continue;
				if ( !(A[i][k] && A[k][j] && A[i][j]) ) 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;
}