Cod sursa(job #2295098)

Utilizator Salamandra01Felmeri Zsolt Salamandra01 Data 3 decembrie 2018 08:38:44
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    freopen("royfloyd.in", "r", stdin);
    freopen("royfloyd.out", "w", stdout);
    int **matrix;
    int n;
    cin >> n;

    matrix = (int**)malloc(n*sizeof(int*));
    for(int i = 1; i <= n; ++i)
        matrix[i] = (int*)malloc(n*sizeof(int));

    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j){
            cin >> matrix[i][j];
        }
    }

    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j){
            for(int k = 1; k <= n; ++k){
                if(matrix[j][i] && matrix[i][k] && j != k){
                    if(!matrix[j][k]){
                        matrix[j][k] = matrix[j][i] + matrix[i][k];
                    }
                    else{
                        matrix[j][k] = min(matrix[j][k], matrix[j][i]+matrix[i][k]);
                    }
                }
            }
        }
    }

    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= n; ++j){
            cout << matrix[i][j] << ' ';
        }
        cout << '\n';
    }

    for(int i = 1; i <= n; ++i){
        free(matrix[i]);
    }
    free(matrix);

    return 0;
}