Cod sursa(job #2813663)

Utilizator amalia.gemanGeman Aamalia amalia.geman Data 7 decembrie 2021 01:13:25
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <bits/stdc++.h>
#define NMax 101
#define inf 2e9

using namespace std;

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


class graf
{
    int nrNoduri, nrMuchii;
    bool orientat;

public:
    graf(int n, int m, bool o); // constructor

    //Roy-Floyd
    void Roy_Floyd(int matrice[NMax][NMax]);
};


int N, M;


graf :: graf(int n, int m, bool o)
{
    nrNoduri = n;
    nrMuchii = m;
    orientat = o;
}

void graf :: Roy_Floyd(int matrice[NMax][NMax])
{
    for(int k = 1; k <= nrNoduri; ++k)
        for(int i = 1; i <= nrNoduri; ++i)
            for(int j = 1; j <= nrNoduri; ++j)
                if(matrice[i][j] > matrice[i][k] + matrice[k][j] && i != j)
                    matrice[i][j] = matrice[k][j] + matrice[i][k];

    // afisare
    for(int i = 1; i <= nrNoduri; ++i)
    {
        for(int j = 1; j <= nrNoduri; ++j)
                fout << matrice[i][j] << " ";
        fout << "\n";
    }
}


int main()
{
    fin >> N;
    graf G(N, 0, 0);

    int matrice[NMax][NMax];

    // citire
    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            fin >> matrice[i][j];

    // initializare
    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            if(i == j)
                matrice[i][j] = 0;
            else if(matrice[i][j] == 0 && i != j)
                matrice[i][j] = inf;


    G.Roy_Floyd(matrice);

    return 0;
}