Cod sursa(job #1274705)

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

#include <algorithm>

#include <vector>

using namespace std;

#define INFINITY ((1 << 31) - 1)

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

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

    scanf("%d", &V);

    int i;
    for(i = 0 ; i <= V ; ++i)
        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]);
            if(!M[i][j] && i != j)
                M[i][j] = INFINITY;
        }

    for(k = 1 ; k <= V ; ++k)
        for(i = 1 ; i <= V ; ++i)
            for(j = 1 ; j <= V; ++j)
            {
                if(M[i][k] == INFINITY || M[k][j] == INFINITY)
                    continue;

                if(M[i][j] > M[i][k] + M[k][j])
                    M[i][j] = M[i][k] + M[k][j];
            }

    for(i = 1 ; i <= V ; ++i)
    {
        for(j = 1 ; j <= V ; ++j)
            printf("%d ", M[i][j] == INFINITY ? 0 : M[i][j]);
        printf("\n");
    }

    return 0;
}