Cod sursa(job #2631114)

Utilizator vnedelcuVictor Andrei Nedelcu vnedelcu Data 29 iunie 2020 00:35:18
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>

int main() {
    FILE * f;
    int n;
    int ** M;

    f = fopen("royfloyd.in", "r");
    fscanf(f, "%d", &n);
    M = new int * [n];
    for (int i = 0; i < n; i++) {
        M[i] = new int [n];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            fscanf(f, "%d", &M[i][j]);
        }
    }
    fclose(f);

    for (int k = 0; k < n; k++) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) {
                    continue;
                }
                int c = 0;
                if (M[i][k] && M[k][j]) {
                    c = M[i][k] + M[k][j];
                }
                if (c && c < M[i][j] || M[i][j] == 0) {
                    M[i][j] = c;
                }
            }
        }
    }

    f = fopen("royfloyd.out", "w");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            fprintf(f, "%d ", M[i][j]);
        }
        fprintf(f, "\n");
    }
    fclose(f);

    for (int i = 0; i < n; i++) {
        delete [] M[i];
    }
    delete [] M;

    return 0;
}