Cod sursa(job #150242)

Utilizator peanutzAndrei Homorodean peanutz Data 6 martie 2008 19:24:38
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>

#define NMAX 102

int a[NMAX][NMAX];
int n;

void read()
{
	int i, j;
	scanf("%d ", &n);
	for(i = 1; i <= n; ++i)
		for(j = 1; j <= n; ++j) scanf("%d", &a[i][j]);
}

void rf()
{
	int i, j, k;
	for(k = 1; k <= n; ++k)
		for(i = 1; i <= n; ++i)
			for(j = 1; j <= n; ++j)
			{
                        	if(i == j) continue;
				if(!a[i][k] || !a[k][j]) continue;
				if(!a[i][j] || a[i][k] + a[k][j] < a[i][j])
					a[i][j] = a[i][k] + a[k][j];
			}
}

int main()
{
	int i, j;
	freopen("royfloyd.in", "r", stdin);
	freopen("royfloyd.out", "w", stdout);

	read();

	rf();

	for(i = 1; i <= n; ++i, printf("\n"))
		for(j = 1; j <= n; ++j)
			printf("%d ", a[i][j]);


	return 0;
}