Cod sursa(job #954463)

Utilizator SmarandaMaria Pandele Smaranda Data 29 mai 2013 11:13:32
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <cstring>

using namespace std;

const long N = 110, INF = 200000000;
long a [N][N], n, dp [N][N];

void read (){
    long i, j;
    scanf ("%ld", &n);
     memset (dp, -1, sizeof (dp));
    for (i = 1; i <= n; i ++){
        for (j = 1; j <= n; j ++) {
            scanf ("%ld", &a [i][j]);
            dp [i][j] = a [i][j];
            if (a [i][j] == 0) {
                a [i][j] = INF;
                dp [i][j] = INF;
            }
        }
        dp [i][i] = 0;
    }
}

void solve (){
    long i, j, k;

    for (k = 1; k <= n; k ++)
        for (i = 1; i <= n; i ++)
            for (j = 1; j <= n; j ++) {
                if (dp [i][k] + dp [k][j] < dp [i][j])
                    dp [i][j] = dp [i][k] + dp [k][j];
            }


    for (i = 1; i <= n; i ++){
        for (j = 1; j <= n; j ++){
            if (dp [i][j] == INF)
                printf ("0 ");
            else
                printf ("%ld ", dp [i][j]);
        }
        printf ("\n");
    }
}

int main (){
    freopen ("royfloyd.in", "r", stdin);
    freopen ("royfloyd.out", "w", stdout);

    read ();
    solve ();
    return 0;
}