Cod sursa(job #688182)

Utilizator mateiuliIulian mateiuli Data 23 februarie 2012 09:55:00
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 101
#define min(a, b) ((a) > (b) ? (a) : (b))
int Graf[NMAX][NMAX];
int N;

void citire();
void royfloyd();
void afisare();

int main() 
{
	citire();
	royfloyd();
	afisare();
}

void royfloyd() 
{
	for(int k=1; k<=N; k++)
		for(int i=1; i<=N; i++)
			for(int j=1; j<=N; j++)
				if(Graf[i][k] && Graf[k][j] && (Graf[i][j] > Graf[i][k] + Graf[k][j] || !Graf[i][j]) && i != j)
					Graf[i][j] = Graf[i][k] + Graf[k][j];
}

void afisare() 
{
	ofstream fout("royfloyd.out");
	for(int i=1; i<=N; i++) 
	{
		for(int j=1; j<=N; j++)
			fout<<Graf[i][j]<<' ';
		fout<<'\n';
	}
	fout.close();
}

void citire() 
{
	ifstream fin("royfloyd.in");
	fin >> N;
	for(int i=1; i<=N; i++)
		for(int j=1; j<=N; j++)
			fin >> Graf[i][j];
		
	fin.close();
}