Cod sursa(job #1234805)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 28 septembrie 2014 00:49:08
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
using namespace std;

ifstream is("royfloyd.in");
ofstream os("royfloyd.out");

int N;
short x[101][101];

void Input();
void RoyFloyd();
void Output();

int main()
{
    Input();
    RoyFloyd();
    Output();

    is.close();
    os.close();
}

void Input()
{
    is >> N;
    for ( int i = 1; i <= N; ++i )
        for ( int j = 1; j <= N; ++j )
            is >> x[i][j];
}

void RoyFloyd()
{
    for ( int k = N; k >= 1; --k )
        for ( int i = 1; i <= N; ++i )
            for ( int j = 1; j <= N; ++j )
                if ( (x[i][k] + x[k][j] < x[i][j] || !x[i][j]) && i != j && x[i][k] && x[k][j] )
                    x[i][j] = x[i][k] + x[k][j];
}

void Output()
{
    for ( int i = 1; i <= N; ++i )
    {
        for ( int j = 1; j <= N; ++j )
            os << x[i][j] << " ";
        os << '\n';
    }
}