Cod sursa(job #954454)

Utilizator SmarandaMaria Pandele Smaranda Data 29 mai 2013 11:08:02
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 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][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 ++)
            printf ("%ld ", dp [i][j]);
        printf ("\n");
    }
}

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

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