Cod sursa(job #2888262)

Utilizator i.uniodCaramida Iustina-Andreea i.uniod Data 10 aprilie 2022 21:14:23
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>

#include "errors.h"

#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define INF 1e9

int main() {
    int **graph, nr_nodes;

    scanf("%d", &nr_nodes);

    graph = malloc(nr_nodes * sizeof(int*));
    DIE(!graph, "[malloc] failed\n");

    for(int i = 0; i < nr_nodes; i++) {
        graph[i] = calloc(nr_nodes, sizeof(int*));
        DIE(!graph[i], "[calloc] failed\n");
    }

    for(int i = 0; i < nr_nodes; i++) {
        for(int j = 0; j < nr_nodes; j++) {
            scanf("%d", &graph[i][j]);

            if (graph[i][j] == 0 && i !=j) {
                graph[i][j] = INF;
            }
        }
    }

    for (int k = 0; k < nr_nodes; k++) {
        for(int i = 0; i < nr_nodes; i++) {
            for(int j = 0; j < nr_nodes; j++) {
                if (i != j && i != k && k != j) {
                    graph[i][j] = MIN(graph[i][j], graph[i][k] + graph[k][j]);
                }
            }
        }
    }

    for (int i = 0; i < nr_nodes; i++) {
        for (int  j = 0; j < nr_nodes; j++) {
            printf("%d ", (graph[i][j] != INF ? graph[i][j] : 0));
        }
        printf("\n");
    }

    for (int i = 0; i < nr_nodes; i++) {
        free(graph[i]);
    }
    free(graph);

    return 0;
}