Pagini recente » Cod sursa (job #2893017) | Cod sursa (job #418150) | Cod sursa (job #162529) | Cod sursa (job #610320) | Cod sursa (job #2815232)
// complexitatea O(n^3)
#include <iostream>
#include <fstream>
#define Nmax 101
#define valMax 1001
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int n, w[Nmax][Nmax]; // w = matricea ponderilor
int d[Nmax][Nmax]; // d = matricea drumurilor minime
int p[Nmax][Nmax]; // p = matricea de predecesori (/tati)
int main()
{
fin >> n;
for (int i=1; i<=n; i++) {
for (int j=1; j<=n; j++){
fin >> w[i][j]; // citesc ponderea pentru fiecare muchie (i,j)
d[i][j] = w[i][j]; // initializez matricea drumurilor minime cu ponderile
// initializez predecesorul lui j :
if(w[i][j] == valMax) p[i][j] = 0; // cu 0 daca de la i la j nu exista arc
else p[i][j] = i; // cu i daca am arc de la i la j
} // adica initial pe fiecare linie am indicele liniei i
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
for(int k=1; k<=n; k++){ // with only one intermediate vertex
if (d[i][j] > d[i][k] + d[k][j]) {
d[i][j] = d[i][k] + d[k][j]; // actualizez drumul minim
p[i][j] = p[k][j]; // si tatal/predecesorul lui j
}
}
for (int i=1; i<=n; i++) {
for (int j = 1; j <= n; j++) {
fout << d[i][j] << " ";
}
fout << endl;
}
return 0;
}