Cod sursa(job #2437193)

Utilizator minculescualex9Minculescu Alex minculescualex9 Data 8 iulie 2019 20:14:45
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
using namespace std;

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

#define NMAX 105
#define inf 2000000000

int N, a[NMAX][NMAX];

void citire(){
    fin >> N;
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= N; j++)
            fin >> a[i][j];
}

void Floyd_Warshall(){
    for(int k = 1; k <= N; k++)
        for(int i = 1; i <= N; i++)
            for(int j = 1; j <= N; j++){                            //Daca:
                if(a[i][k] != 0 &&                                  // - muchia (i, k) != 0
                   a[k][j] != 0 &&                                  // - muchia (k, j) != 0
                   (a[i][j] > a[i][k] + a[k][j] || a[i][j] == 0) && // - distanta (i,k,j) e mai mica decat cea curenta (i,j)
                   i != j)                                          // - (i, j) nu e bucla
                            a[i][j] = a[i][k] + a[k][j];
            }
}

void afisare(){
    for(int i = 1; i <= N; i++){
        for(int j = 1; j <= N; j++)
            fout << a[i][j] << " ";
        fout << "\n";
    }
}

int main()
{
    citire();
    Floyd_Warshall();
    afisare();

    return 0;
}