Cod sursa(job #1565679)

Utilizator TopiAlexTopala Alexandru TopiAlex Data 11 ianuarie 2016 10:00:51
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <vector>
#define N_MAX 103
#define MIN(a, b) (a < b ? a : b)
using namespace std;

int n;
vector<int> adiac[N_MAX];

inline void citire();
void Floyd_Warshall();
inline void afisare();

int main()
{
    citire();
    Floyd_Warshall();
    afisare();
    return 0;
}

inline void citire(){
    freopen("royfloyd.in", "r", stdin);
    freopen("royfloyd.out", "w", stdout);

    scanf("%d", &n);

    int i, j;
    int x;

    for (i = 0; i < n; ++i){
        for (j = 0; j < n; ++j){
            scanf("%d", &x);
            adiac[i].push_back(x);
        }
    }
}

void Floyd_Warshall(){
    int x, y, z;

    for (z = 0; z < n; ++z)
        for (x = 0; x < n; ++x)
            for (y = 0; y < n; ++y){
                if (x == y)
                    continue;
                if (adiac[x][z] == 0 || adiac[z][y] == 0)
                    continue;

                if (adiac[x][y] == 0 || adiac[x][z] + adiac[z][y] < adiac[x][y])
                    adiac[x][y] = adiac[x][z] + adiac[z][y];
            }
}

inline void afisare(){
    int i, j;
    for (i = 0; i < n; ++i){
        for (j = 0; j < n; ++j){
            printf("%d ", adiac[i][j]);
        }
        printf("\n");
    }
}