Cod sursa(job #970410)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 6 iulie 2013 19:41:49
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#include<vector>
using namespace std;

const int MAXN=102;

int n;
int w[MAXN][MAXN],s[MAXN][MAXN];	//w-weight of edge, s-shortest path between node i&j

void citire()
{
	ifstream fin("royfloyd.in");
	fin>>n;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
			fin>>w[i][j];
	fin.close();
}
void rezolvare()
{
	int k,i,j;
	for (k=1;k<=n;++k)
	{
		for (i=1;i<=n;++i)
		{
			for (j=1;j<=n;++j)
			{
				if (w[i][k] && w[k][j] && (w[i][k]+w[k][j]<w[i][j] || !w[i][j]) && i!=j)
					w[i][j]=w[i][k]+w[k][j];
			}
		}
	}
}
void afisare()
{
	ofstream fout("royfloyd.out");
	for (int i=1;i<=n;++i)
	{
		for (int j=1;j<=n;++j)
			fout<<w[i][j]<<' ';
		fout<<'\n';
	}
	fout.close();
}
int main()
{
	citire();
	rezolvare();
	afisare();
	return 0;
}