Cod sursa(job #1292084)

Utilizator MariusGeantaMarius Geanta MariusGeanta Data 13 decembrie 2014 16:58:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.78 kb
#include <stdio.h>

int N;
int C[100][100];

void floyd_warshall(int C[][100], int N)
{
	int i, j, k;

	for (k = 0; k < N; k++) {
		for (i = 0; i < N; i++) {
			for (j = 0; j < N; j++) {
				if (i == j)
					continue;

				if (!C[i][k] || !C[k][j])
					continue;

				if (C[i][j] > C[i][k] + C[k][j] || !C[i][j]) {
					C[i][j] = C[i][k] + C[k][j];
				}
			}
		}
	}
}

void print_result(int C[][100], int N)
{
	int i, j;

	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			printf("%d ", C[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int i, j;

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

	scanf("%d", &N);

	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			scanf("%d", &C[i][j]);
		}
	}

	floyd_warshall(C, N);

	print_result(C, N);

	return 0;
}