Cod sursa(job #236634)

Utilizator ilincaSorescu Ilinca ilinca Data 28 decembrie 2008 01:16:09
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>

#define maxn 105


int n, m [maxn] [maxn];

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

void res ()
{
	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) && (m [i] [k]) && (m [k] [j]) && (m [i] [j] > m [i] [k]+m [k] [j] || !m [i] [j]))
					m [i] [j]=m [i] [k]+m [k] [j];
}

void print ()
{
	for (int i=1; i <= n; ++i)
	{
		for (int j=1; j <= n; ++j)
			printf ("%d ", m [i] [j]);
		printf ("\n");
	}
}

int main ()
{
	freopen ("royfloyd.in", "r", stdin);
	freopen ("royfloyd.out", "w", stdout);
	scan ();
	res ();
	print ();
	return 0;
}