Cod sursa(job #1435145)

Utilizator nacrocRadu C nacroc Data 12 mai 2015 11:59:13
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#define NMAX 105
#define inf 1 << 30

using namespace std;

int dist[NMAX][NMAX], mat[NMAX][NMAX];

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

    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            dist[i][j] = inf;

    for(int i = 1; i <= N; ++i)
        dist[i][i] = 0;

    for(int i = 1; i <= N; ++i)
        for(int j = 1; j <= N; ++j)
            if(mat[i][j] != 0)
                dist[i][j] = mat[i][j];

    for(int k = 1; k <= N; ++k)
        for(int i = 1; i <= N; ++i)
            for(int j = 1; j <= N; ++j)
                if(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;
}