Cod sursa(job #931833)

Utilizator xbogdanBogdan Boamfa xbogdan Data 28 martie 2013 15:13:14
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include "iostream"
#include "cstdlib"
#include "fstream"
using namespace std;
ifstream in("royfloyd.in");
ofstream out("royfloyd.out");
void Read(int **&ponderi,int &nr_nod)
{	
	in >> nr_nod;
	ponderi = (int**)calloc(nr_nod+1,sizeof(int*));
	for (int i = 0; i < nr_nod+1; ++i)
		ponderi[i] = (int*)calloc(nr_nod+1,sizeof(int));

	for (int i = 1; i < nr_nod+1; ++i)
		for (int j = 1; j < nr_nod+1; ++j)
			in >> ponderi[i][j];
}
void RoyFloyd(int **ponderi,int nr_nod)
{	
	for (int i = 1; i < nr_nod+1; ++i)
		for (int j = 1; j < nr_nod+1; ++j)
			for (int k = 1; k < nr_nod+1; ++k)
				if ( ponderi[i][k] && ponderi[k][j] && i!=j && (ponderi[i][j] > ponderi[i][k] + ponderi[k][j] || !ponderi[i][j]))
					ponderi[i][j] = ponderi[i][k] + ponderi[k][j];
}
void Print(int **costuri,int nr_nod)
{
	for (int i = 1; i < nr_nod+1; ++i) {
		for (int j = 1; j < nr_nod+1; ++j)
			out << costuri[i][j] << " ";
		out << "\n";
	}
}
int main(int argc, char const *argv[])
{
	int **ponderi;
	int nr_nod;
	Read(ponderi,nr_nod);
	RoyFloyd(ponderi,nr_nod);
	Print(ponderi,nr_nod);
	return 0;
}