Cod sursa(job #1296744)

Utilizator tudoras8tudoras8 tudoras8 Data 21 decembrie 2014 14:40:26
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>

#define MAX_SIZE 101
#define MAXA 1000

using namespace std;

const char iname[] = "royfloyd.in";
const char oname[] = "royfloyd.out";

int N, RF[MAX_SIZE][MAX_SIZE];

inline void Read() {
    FILE *in = fopen(iname, "r");
    fscanf(in, "%d", &N);

    for (int i = 1; i <= N; i++)
        for (int j = 1; j <= N; j++) {
            fscanf(in, "%d", &RF[i][j]);
            if (RF[i][j] == 0) RF[i][j] = MAXA + 1;
        }
    fclose(in);
}

inline void Solve() {
    for (int k = 1; k <= N; k++)
        for(int i = 1; i <= N; i++)
            for (int j = 1; j <= N; j++) {
                if (i != j && RF[i][j] > RF[i][k] + RF[k][j])
                    RF[i][j] = RF[i][k] + RF[k][j];
            }
}

inline void Write() {
    FILE *out = fopen(oname, "w");
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++)
            fprintf(out, "%d ", RF[i][j] < MAXA ? RF[i][j] : 0);
        fprintf(out, "\n");
    }
    fclose(out);
}

int main() {
    Read();
    Solve();
    Write();
    return 0;
}