Cod sursa(job #1000634)

Utilizator cbanu96Banu Cristian cbanu96 Data 23 septembrie 2013 15:00:58
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>

#define FILEIN "royfloyd.in"
#define FILEOUT "royfloyd.out"

using namespace std;

const int NMAX = 105;

int dist[NMAX][NMAX];

int main() {
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);
    int n, i, j, k;

    scanf("%d", &n);
    for ( i = 1; i <= n; i++) {
        dist[i][i] = 0;
        for ( j = 1; j <= n; j++) {
            scanf("%d", &dist[i][j]);
        }
    }

    for ( k = 1; k <= n; k++) {
        for ( i = 1; i <= n; i++) {
            for ( j = 1; j <= n; j++) {
                if (dist[i][k] && dist[k][j] && i != j)
                    if (dist[i][k] + dist[k][j] < dist[i][j] || !dist[i][j])
                        dist[i][j] = dist[i][k] + dist[k][j];
            }
        }
    }

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