Cod sursa(job #2207948)

Utilizator Horia14Horia Banciu Horia14 Data 27 mai 2018 15:02:08
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#define MAX_N 100
#define oo 0x3f3f3f3f
using namespace std;

int dp[MAX_N+1][MAX_N+1], n;

void FloydWarshall(int n) {
    for(int k = 1; k <= n; k++)
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                if(dp[i][j] > dp[i][k] + dp[k][j])
                    dp[i][j] = dp[i][k] + dp[k][j];
}

void readGraph() {
    FILE* fin = fopen("royfloyd.in","r");
    fscanf(fin,"%d",&n);
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            fscanf(fin,"%d",&dp[i][j]);
            if(!dp[i][j] && i != j)
                dp[i][j] = oo;
        }
    }
    fclose(fin);
}

void printDistances() {
    FILE* fout = fopen("royfloyd.out","w");
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++)
            if(dp[i][j] != oo)
                fprintf(fout,"%d ",dp[i][j]);
            else fprintf(fout,"0 ");
        fprintf(fout,"\n");
    }
    fclose(fout);
}

int main() {
    readGraph();
    FloydWarshall(n);
    printDistances();
    return 0;
}