Cod sursa(job #670922)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 30 ianuarie 2012 14:05:29
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>

using namespace std;

const char iname[] = "royfloyd.in";
const char oname[] = "royfloyd.out";

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

int n, i, a[102][102], j, k, rf[102][102];

void royfloyd()
{
	for(i = 1; i <= n; i ++)
	{
		rf[i][i] = 0;
		for(j = 1; j <= n; j ++)
			rf[i][j] = a[i][j];
		if(rf[i][j] == 0)
			rf[i][j] = 29102901;
	}
	
	for(k = 1; k <= n; k ++)
		for(i = 1; i <= n; i ++)
			for(j = 1; j <= n; j ++)
			{
				if( (rf[i][k] && rf[k][j]) && ( (rf[i][k] + rf[k][j] < rf[i][j]) || (rf[i][j] == 0 && i != j) ) )
					rf[i][j] = rf[i][k] + rf[k][j];
			}
	for(i = 1; i <= n; i ++)
	{
		for(j = 1; j <= n; j ++)
			fout << rf[i][j] << " ";
		fout << "\n";
	}
}


int main()
{
	fin >> n;
	for(i = 1; i <= n; i ++)
	{
		for(j = 1; j <= n; j ++)
			fin >> a[i][j];
	}
	
	royfloyd();
	return 0;
}