Cod sursa(job #1482035)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 5 septembrie 2015 20:40:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <algorithm>

const int MAX_N = 100;
const char IN [ ] = "royfloyd.in" ;
const char OUT [ ] = "royfloyd.out" ;
const int INF = 0x3F3F3F3F;

using namespace std;

ifstream cin ( IN );
ofstream cout ( OUT );

int a [ MAX_N ][ MAX_N ];

int main ( void )
{
    cin.tie ( 0 );
    ios_base :: sync_with_stdio ( 0 );

    int n;
    cin >> n;

    for ( int i = 0; i < n; i ++ )
    {
        for ( int j = 0; j < n; j ++ )
        {
            cin >> a [ i ][ j ];
            a [ i ][ j ] ^= ( INF & - ( !a [ i ][ j ] && i != j ) );
        }
    }
    cin.close ( );

    // foloseste multimea de noduri { 0, 1, .. k } pentru a determina drumul minin intre i, j
    for ( int k = 0; k < n; k ++ )
    {
        for ( int i = 0; i < n; i ++ )
        {
            for ( int j = 0; j < n; j ++ )
            {
                if ( a [ i ][ k ] != INF && a [ k ][ j ] != INF )
                    a [ i ][ j ] = min ( a [ i ][ j ], a [ i ][ k ] + a [ k ][ j ] );
            }
        }
    }

    for ( int i = 0; i < n; i ++ )
    {
        for ( int j = 0; j < n; j ++ )
            cout << ( a [ i ][ j ] & - ( a [ i ][ j ] != INF ) ) << ' ';
        cout << '\n';
    }
    cout.close ( );
    return 0;
}