Cod sursa(job #1295870)

Utilizator mvcl3Marian Iacob mvcl3 Data 20 decembrie 2014 12:49:42
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>

#define Max_Size 109

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] && i != j) RF[i][j] = Max_Size * Max_Size;
        }
}

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][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]);
        fprintf(out, "\n");
    }
}

int main()
{
    Read();
    Solve();
    Write();

    return 0;
}