Cod sursa(job #1292079)

Utilizator MariusGeantaMarius Geanta MariusGeanta Data 13 decembrie 2014 16:54:01
Problema Floyd-Warshall/Roy-Floyd Scor 50
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 == k || j == k || 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][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);

}