Cod sursa(job #1861305)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 28 ianuarie 2017 19:20:24
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

const int N_MAX = 102;

int n;
int dist[N_MAX][N_MAX];

void read() {
    ifstream fin("royfloyd.in");

    fin >> n;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            fin >> dist[i][j];
        }
    }

    fin.close();
}

void royfloyd() {
    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (i != j && dist[i][k] * dist[k][j]) {
                    if (dist[i][j] > dist[i][k] + dist[k][j] || !dist[i][j]) {
                        dist[i][j] = dist[i][k] + dist[k][j];
                    }
                }
            }
        }
    }
}

void write() {
    ofstream fout("royfloyd.out");

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            fout << dist[i][j] << ' ';
        }

        fout << '\n';
    }

    fout.close();
}

int main() {
    read();
    royfloyd();
    write();

    return 0;
}