Cod sursa(job #880772)

Utilizator PatrikStepan Patrik Patrik Data 17 februarie 2013 12:14:10
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
    #include<cstdio>
    #include<fstream>
    using namespace std;
    int n , a[101][101] , d[101][101] ;

    void citire();
    void royfloyd();
    void tipar();

    int main()
    {
        citire();
        royfloyd();
        tipar();
        return 0;
    }

    void citire()
    {
        freopen("royfloyd.in" , "r" , stdin );
        scanf("%d" , &n );
        for( int i = 1 ; i<= n ; ++i )
            for(int j = 1 ; j <= n ; ++j)
                    scanf("%d" , &d[i][j]);
    }

    void royfloyd()
    {
        for( int k = 1 ; k <= n ; ++k )
            for ( int i = 1 ; i <= n ; ++i )
                for( int j = 1 ; j<= n ; ++j )
                    if(d[i][j] > d[i][k] + d[k][j] || (!d[i][j]&&d[i][k]&&d[k][j]&&i!=j))
                d[i][j] = d[i][k] + d[k][j];
    }

    void tipar()
    {
        freopen("royfloyd.out" , "w" , stdout );
        for( int i = 1 ; i<= n ; ++i )
        {
            for( int j = 1 ; j<= n ; ++j )
                printf("%d " , d[i][j] );
            printf("\n");
        }
    }