Cod sursa(job #2145259)

Utilizator MaligMamaliga cu smantana Malig Data 27 februarie 2018 11:06:16
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;

#if 1
    #define pv(x) cout<<#x<<" = "<<x<<"; ";cout.flush()
    #define pn cout<<endl
#else
    #define pv(x)
    #define pn
#endif

#ifdef ONLINE_JUDGE
    #define in cin
    #define out cout
#else
    ifstream in("royfloyd.in");
    ofstream out("royfloyd.out");
#endif

using ll = long long;
using ull = unsigned long long;
using ui = unsigned int;
#define pb push_back
#define mp make_pair
const int NMax = 1e2 + 5;
const ll inf_ll = 1e18 + 5;
const int inf_int = 1e9 + 5;
const int mod = 100003;
using zint = int;

int N;
int dist[NMax][NMax];

int main() {
    in>>N;
    for (int i = 1;i <= N;++i) {
        for (int j = 1;j <= N;++j) {
            in>>dist[i][j];
            dist[i][j] = (dist[i][j] == 0 && i != j) ? inf_int : dist[i][j];
        }
    }

    for (int k = 1;k <= N;++k) {
        for (int i = 1;i <= N;++i) {
            for (int j = 1;j <= N;++j) {
                if (dist[i][j] > dist[i][k] + dist[k][j]) {
                    dist[i][j] = dist[i][k] + dist[k][j];
                }
            }
        }
    }

    for (int i = 1;i <= N;++i) {
        for (int j = 1;j <= N;++j) {
            out << ((dist[i][j] == inf_int) ? 0 : dist[i][j]) << ' ';
        }
        out << '\n';
    }



    return 0;
}