Cod sursa(job #1250104)

Utilizator gabrieligabrieli gabrieli Data 27 octombrie 2014 20:13:39
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <algorithm>
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;

int main() {
    ifstream fin("royfloyd.in");
    ofstream fout("royfloyd.out");
    
    int n; fin >> n;
    vector<vector<int>> G(n);
    
    for (int i = 0, x; i < n; ++i)
        copy_n(istream_iterator<int>(fin), n, back_inserter(G[i]));
    
    for (int k = 0; k < n; ++k)
        for (int u = 0; u < n; ++u)
            for (int v = 0; v < n; ++v)
                if (u != v && G[u][k] != 0 && G[k][v] != 0) {
                    if (G[u][v] == 0) G[u][v] = G[u][k] + G[k][v];
                    else G[u][v] = min(G[u][v], G[u][k] + G[k][v]);
                }
    
    for (auto& v : G) {
        copy(v.begin(), v.end(), ostream_iterator<int>(fout, " "));
        fout << '\n';
    }
    
    return 0;
}