Cod sursa(job #1238268)

Utilizator PatrikStepan Patrik Patrik Data 6 octombrie 2014 10:49:02
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
    #include<cstdio>
    using namespace std;
    #define MAX 101
    int N , dist[MAX][MAX];

    int main()
    {
        freopen("royfloyd.in" , "r" , stdin );
        freopen("royfloyd.out" , "w" , stdout );
        scanf("%d" , &N );
        for(int i = 1 ; i <= N ; ++i )
            for(int j = 1 ; j <= N ; ++j )
                scanf("%d" , &dist[i][j] );

        for(int k = 1 ; k <= N ; ++k )
            for(int i = 1 ; i <= N ; ++i )
                for(int j = 1 ; j <= N ; ++j )
                    if( i!= j && dist[i][k] && dist[k][j] && (!dist[i][j] || dist[i][j] > dist[i][k] + dist[k][j]))
                        dist[i][j] = dist[i][k] + dist[k][j];

        for(int i = 1 ; i <= N ; ++i )
        {
            for(int j = 1 ; j <= N ; ++j )
                printf("%d " , dist[i][j] );
            printf("\n");
        }

        return 0;
    }