Cod sursa(job #2604231)

Utilizator lepoartcevPaltineanu Rares-Mihai lepoartcev Data 22 aprilie 2020 10:20:20
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int** initializeMatrix(int n) {

    int**matrix = (int**)malloc(sizeof(int*) * n);

    for(int i = 0; i < n; i++) {

        matrix[i] = (int*)malloc(sizeof(int) * n);
        memset(matrix[i], 0, sizeof(int) * n);

    }

    return matrix;
}

void read(FILE* in, int n, int** matrix) {

   for(int i = 0; i < n; i++)
    for(int j = 0; j < n; j++)
    fscanf(in, "%d", &matrix[i][j]);
}

void afis(FILE* out, int** matrix, int n) {

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {

            fprintf(out, "%d ", matrix[i][j]);

        }

        fprintf(out, "\n");

    }
}

void RoyFloyd(int** matrix, int n, FILE* out) {

    for(int k = 0; k < n; k++) {
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {

                if (matrix[i][k] && matrix[k][j] && (matrix[i][j] > (matrix[i][k] + matrix[k][j]) || !matrix[i][j]) && i != j)
                    matrix[i][j] = matrix[i][k] + matrix[k][j];


            }
        }
    }

    afis(out, matrix, n);
}

int main() {
    FILE* in = fopen("royfloyd.in", "r");
    FILE* out = fopen("royfloyd.out", "w");

    int n;
    fscanf(in, "%d", &n);

    int** matrix =  initializeMatrix(n);
    read(in, n, matrix);
    RoyFloyd(matrix, n,out);
    return 0;
}