Cod sursa(job #527482)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 31 ianuarie 2011 19:22:15
Problema Floyd-Warshall/Roy-Floyd Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>

using namespace std;

const char iname[] = "royfloyd.in";
const char oname[] = "royfloyd.out";
const int  nmax    = 128;
const int  inf     = 29219009;

ifstream fin(iname);
ofstream fout(oname);

int RF[nmax][nmax], A[nmax][nmax];
int n, i, j, k;

int main()
{
	fin >> n;
	for(i = 1; i <= n; i ++)
		for(j = 1; j <= n; j ++)
		{
			fin >> A[i][j];
			if(A[i][j])
				RF[i][j] = A[i][j];
			else
				RF[i][j] = inf;
		}
		
	for(k = 1; k <= n; k ++)
		for(i = 1; i <= n; i ++)
			for(j = 1; j <= n; j ++)
				if(A[i][k] && A[k][j] && RF[i][k] != inf && RF[k][j] != inf && i != j && i != k && j != k)
					RF[i][j] = min(RF[i][j], RF[i][k] + RF[k][j]);
	for(i = 1; i <= n; i ++)
	{
		for(j = 1; j <= n; j ++)
		{
			if(RF[i][j] == inf || i == j)
				fout << "0 ";
			else
				fout << RF[i][j] << " ";
		}
		fout << "\n";
	}
	return 0;
}