Cod sursa(job #2813652)

Utilizator amalia.gemanGeman Aamalia amalia.geman Data 7 decembrie 2021 00:54:36
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 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;
    //vector <int> gr[NMax]; // liste de adiacenta ale grafului


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])
                    matrice[i][j] = matrice[k][j] + matrice[i][k];

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


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

    int matrice[NMax][NMax];
    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            if(i == j)
                matrice[i][j] = 0;
            else
                matrice[i][j] = inf;

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

    G.Roy_Floyd(matrice);

    return 0;
}