Cod sursa(job #858255)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 18 ianuarie 2013 18:49:56
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <climits>

using namespace std;

#define INF INT_MAX

int A[105][105];
int N;

int main ()
{
	freopen ("royfloyd.in" , "r" , stdin);
	freopen ("royfloyd.out" , "w" , stdout);
	
	scanf ("%d" , &N);
	
	for (int i = 1 ; i <= N ; ++i)
		for (int j = 1 ; j <= N ; ++j)
			scanf ("%d" , &A[i][j]);
	
	for (int k = 1 ; k <= N ; ++k)
		for (int i = 1 ; i <= N ; ++i)
			for (int j = 1 ; j <= N ; ++j)
			{
				if (i == k || j == k || i == j)
					continue;
				
				if (!A[i][k] || !A[k][j])
					continue;
				
				if (!A[i][j])
				{
					A[i][j] = A[i][k] + A[k][j];
					continue;
				}
				
				A[i][j] = min (A[i][k] + A[k][j] , A[i][j]);
			}
	
	for (int i = 1 ; i <= N ; ++i)
	{
		for (int j = 1 ; j <= N ; ++j)
			printf ("%d " , A[i][j]);
		
		printf ("\n");
	}
	
	return 0;
}