Cod sursa(job #1274701)

Utilizator HotSteelBeteag Ion Andrei HotSteel Data 24 noiembrie 2014 10:05:51
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>

#include <algorithm>

#include <vector>

using namespace std;

const int INFINITY = (1 << 31) - 1;

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

    int V;
    vector < vector < int > > M;
    vector < vector < int > > Distance;


    scanf("%d", &V);

    int i;
    for(i = 0 ; i <= V ; ++i)
    {
        Distance.push_back(vector < int > (V + 1, INFINITY));
        M.push_back(vector < int > (V + 1));
    }

    int j, k;
    for(i = 1 ; i <= V ; ++i)
        for(j = 1 ; j <= V ; ++j)
            scanf("%d", &M[i][j]);

    for(i = 1 ; i <= V ; ++i)
        Distance[i][i] = 0;

    for(i = 1 ; i <= V ; ++i)
        for(j = 1 ; j <= V ; ++j)
            if(M[i][j])
                Distance[i][j] = M[i][j];

    for(k = 1 ; k <= V ; ++k)
        for(i = 1 ; i <= V ; ++i)
            for(j = 1 ; j <= V; ++j)
                if(Distance[i][j] > Distance[i][k] + Distance[k][j])
                    Distance[i][j] = Distance[i][k] + Distance[k][j];

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

    return 0;
}