Cod sursa(job #2832592)

Utilizator enestianEne Sebastian enestian Data 13 ianuarie 2022 22:47:31
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>

using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");

/* Restrictii
1 <= N <= 100*/
#define NMAX 100
#define INF 2000000
//am folosit pseudocodul algoritmului rescris de la https://ocw.cs.pub.ro/courses/pa/laboratoare/laborator-09
int n, vcost[NMAX][NMAX];

void citire(int n) 
{
    for (int i = 1; i <= n; ++i)
    {        
        for (int j = 1; j <= n; ++j) 
        {
            f >> vcost[i][j];
            if (!vcost[i][j] && i != j)
                vcost[i][j] = INF;
        }        
    }
}

void FloydWarshall_si_print(int n)
{
    int k;
    for (k = 1; k <= n-1; ++k)
        for (int i = 1; i <= n; ++i)
                for (int j = 1; j <= n; ++j)
                    vcost[i][j] = min(vcost[i][j], vcost[i][k] + vcost[k][j]);
   // aici k = n asadar mai jos facem ultima iteratie si gata putem face si afisarea cu ocazia asta
    for (int i = 1; i <= n; ++i)
    {
       for (int j = 1; j <= n; ++j)
           {
            vcost[i][j] = min(vcost[i][j], vcost[i][k] + vcost[k][j]);
            g << vcost[i][j] << ' ';
            }
       g << '\n';
    }                          
}


int main() {
    f >> n;

    citire(n);

    FloydWarshall_si_print(n);

    f.close();
    g.close();
	return 0;
}