Cod sursa(job #1131534)

Utilizator Theorytheo .c Theory Data 28 februarie 2014 21:16:45
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin ("royfloyd.in");
ofstream fout ("royfloyd.out");

const int NMAX = 105;
const int INF = (1 << 30);

int N; int A[NMAX][NMAX];

int print(const int &X) {

    if(X == INF) return 0;
        return X;
}

int main() {

    fin >> N;
    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j) {
            fin >> A[i][j];
            if(A[i][j] == 0) A[i][j] = INF;
        }

    for(int k = 1; k <= N; ++k)
        for(int i = 1; i <= N; ++i) {
            //if(i == k) continue;
            for(int j = 1; j <= N; ++j) {
                if(j == i ) continue ;

                if(A[i][j] > A[i][k] + A[k][j])
                    A[i][j] = A[i][k] + A[k][j];
            }
    }

    for(int i = 1; i <= N; ++i) {
        for(int j = 1; j <= N; ++j)
            fout << print(A[i][j]) <<" ";
        fout << '\n';
    }
    return 0;
}