Cod sursa(job #1347773)

Utilizator radudorosRadu Doros radudoros Data 19 februarie 2015 10:54:19
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <algorithm>
#define nmax 101
using namespace std;

ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int n,x;
int v[nmax][nmax],d1[nmax][nmax],d2[nmax][nmax];

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			fin >> x;
			if (x == 0 && i != j)
				v[i][j] = 3200000;
			else
				v[i][j] = x;
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			d1[i][j] = v[i][j];
		}
	}
	for (int k = 1; k <= n; k++)
	{
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				d2[i][j] = 0;
			}
		}
		for (int i = 1; i<=n; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				d2[i][j] = min(d1[i][j], d1[i][k] + d1[k][j]);
			}
		}
		for (int i = 1; i <= n; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				d1[i][j] = d2[i][j];
			}
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			if (d1[i][j] == 3200000)
				fout << '0' << ' ';
			else
				fout << d1[i][j] << ' ';
		}
		fout << '\n';
	}
}