Cod sursa(job #634599)

Utilizator JBaccountCatalin JBaccount Data 16 noiembrie 2011 18:49:41
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <cstdio>
#include <string>

using namespace std;

#define NM 105
#define inf 1000000000

int A[NM][NM];

int main()
{
	freopen ("royfloyd.in", "r", stdin);
	freopen ("royfloyd.out", "w", stdout);
	
	int N;
	
	scanf ("%d", &N);
	
	for (int i = 1; i <= N; ++i)
		for (int j = 1; j <= N; ++j)
			scanf ("%d", &A[i][j]);	
		
	for (int i = 1; i <= N; ++i)
		for (int j = 1; j <= N; ++j)
			if (!A[i][j] && (i != j)) A[i][j] = inf;
		
	for (int k = 1; k <= N; ++k)
		for (int i = 1; i <= N; ++i)
			for (int j = 1; j <= N; ++j)
				if (A[i][k] != inf && A[k][j] != inf && A[i][j] > A[i][k] + A[k][j]) A[i][j] = A[i][k] + A[k][j];

	for (int i = 1; i <= N; ++i)
	{
		for (int j = 1; j <= N; ++j) {if (A[i][j] == inf) A[i][j] = 0; printf ("%d ", A[i][j]);}
		printf ("\n");
	}	
	
	return 0;
}