Cod sursa(job #1628022)

Utilizator KKK21Alexandru Gabriel KKK21 Data 3 martie 2016 20:19:16
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

#define MAX_N 101
#define INF 1100

const char inFile[] = "royfloyd.in";
const char outFile[] = "royfloyd.out";

short int D[MAX_N][MAX_N];
int N;

inline int minim( int a, int b ){
    return  a < b ? a : b;
}

void read(){

    ifstream fin(inFile);

    fin >> N;

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

    fin.close();

}

void royfloyd(){

    for( int k = 1; k <= N; k++ )
        for( int i = 1; i <= N; i++ )
            for( int j = 1; j <= N; j++ )
                if( i != j )
                    D[i][j] = minim( D[i][j] , D[i][k] + D[k][j] );

}

void print(){

    ofstream fout(outFile);

    for( int i = 1; i <= N; i++ ){
        for( int j = 1; j <= N; j++ )
            fout << (D[i][j] == INF ? 0 : D[i][j]) << " ";
        fout << "\n";
    }

    fout.close();

}

int main()
{
    read();

    royfloyd();

    print();

    return 0;
}