Cod sursa(job #1675616)

Utilizator experiment322Alexandru-Damian Manea experiment322 Data 5 aprilie 2016 14:01:18
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>

enum {
	NMAX = 100,
	INF = 1000000000
};

static int n, mat[NMAX][NMAX];

static void RoyFloyd(void)
{
	int k, i, j;
	for (k = 0; k < n; ++k) {
		for (i = 0; i < k; ++i) {
			for (j = 0; j < k; ++j) {
				if (mat[i][k] + mat[k][j] < mat[i][j]) {
					mat[i][j] = mat[i][k] + mat[k][j];
				}
			}
		}
	}
}

static void Read(void)
{
	int i, j;
	scanf("%i", &n);
	for (i = 0; i < n; ++i) {
		for (j = 0; j < n; ++j) {
			scanf("%i", &mat[i][j]);
			if (mat[i][j] == 0 && i != j) {
				mat[i][j] = INF;
			}
		}
	}
}

static void Print(void)
{
	int i, j;
	for (i = 0; i < n; ++i) {
		for (j = 0; j < n; ++j) {
			printf("%i ", mat[i][j]);
		}
		printf("\n");
	}
}

int main(void)
{
	freopen("royfloyd.in", "r", stdin);
	freopen("royfloyd.out", "w", stdout);
	Read();
	RoyFloyd();
	Print();
	return 0;
}