Cod sursa(job #1889285)

Utilizator dan.marculetFII MarculetDan dan.marculet Data 22 februarie 2017 17:42:34
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <vector>
using namespace std;

typedef vector<vector<int>> vvi;

auto fin = fopen("royfloyd.in", "r");
auto fout = fopen("royfloyd.out", "w");

vvi mat;
unsigned int n;

vvi royfloyd(vvi &a) {
    vvi b = a;
    for (auto k = 0u; k < n; ++k)
        for (auto i = 0u; i < n; ++i) {
            if (b[i][k] == 0)
                continue;
            for (auto j = 0u; j < n; ++j) {
                if (b[k][j] == 0 || i == j)
                    continue;
                auto d = b[i][k] + b[k][j];
                if (b[i][j] == 0 || b[i][j] > d)
                    b[i][j] = d;
            }
        }
    return b;
}

int main() {
    fscanf(fin, "%d", &n);
    mat.resize(n);
    for (auto i = 0u; i < n; ++i)
        for (auto j = 0u; j < n; ++j) {
            int val;
            fscanf(fin, "%d", &val);
            mat[i].push_back(val);
        }
    auto res = royfloyd(mat);
    for (auto i = 0u; i < n; ++i, fprintf(fout, "\n"))
        for (auto j = 0u; j < n; ++j)
            fprintf(fout, "%d ", res[i][j]);
    return 0;
}