Cod sursa(job #1884227)

Utilizator ReeeBontea Mihai Reee Data 18 februarie 2017 15:49:22
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define NMAX 101

using namespace std;

int n, a[NMAX][NMAX];

void Citire()
{
    ifstream fin("royfloyd.in");
    fin >> n;
    for ( int i = 0 ; i < n ; ++i )
        for ( int j = 0 ; j < n ; ++j )
            fin >> a[i][j];
    fin.close();
}

void Afisare()
{
    ofstream fout("royfloyd.out");
    for( int i = 0 ; i < n ; ++i )
        {
            for ( int j = 0 ; j < n ; ++j )
                fout << a[i][j] << " ";
            fout << '\n';
        }
    fout.close();
}

void Rezolvare()
{
    for( int k = 0; k < n; ++k ) // verific daca trecand prin k se poate optimiza costul de la i la j
        for( int i = 0; i < n; ++i )
            for( int j = 0; j < n; ++j ) //daca putem actualiza
                if( a[i][k] && a[k][j] && i != j && (a[i][j] > a[i][k] + a[k][j] || !a[i][j] ) )
                    a[i][j] = a[i][k] + a[k][j];
}

int main()
{
    Citire();
    Rezolvare();
    Afisare();
    return 0;
}