Cod sursa(job #2959630)

Utilizator alin_simpluAlin Pop alin_simplu Data 1 ianuarie 2023 19:59:00
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
/* Alg lui Floyd-Warshall (Roy-Floyd)
 * 
 * Transforma matricea ponderilor
 * in matricea costurilor minime ale lanturilor/drumurilor
 * 
 */ 
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

const int N = 101, Inf = 0x3f3f3f3f;
int c[N][N]; // matr. ponderilor => matr costurilor minime ale lanturilor / drumurilor
int n;

ifstream fin("roy_floyd.in");
ofstream fout("roy_floyd.out");


void ReadData();
void Floyd_Warshall();
void Write();

int main()
{
	ReadData();
	Floyd_Warshall();
	Write();  // matr lanturilor
	
	return 0;
}
 
void Floyd_Warshall()  // O(n^3)
{
	for (int k = 1; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j)
				if (i != j && c[i][k] + c[k][j] < c[i][j])
					c[i][j] = c[i][k] + c[k][j];
}

void ReadData()
{
	fin >> n;
	
	for (int i = 1; i <= n; ++i)
	    for (int j = 1; j <= n; ++j)
			fin >> c[i][j];
	
}

void Write()
{
	for (int i = 1; i <= n; ++i, fout << '\n')
	    for (int j = 1; j <= n; ++j)
	         fout << c[i][j] << ' ';
}