Cod sursa(job #2198444)

Utilizator vladcocosVlad Cocos vladcocos Data 24 aprilie 2018 15:26:34
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>

#define INF 999999999
#define N 100

using namespace std;

struct Task {
public:
    void solve() {
        read_input();
        get_result();
    }

private:
    int n, d[N][N];

    void read_input() {
        ifstream in("royfloyd.in");
        in >> n;

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

        in.close();
    }

    void get_result() {
        ofstream out("royfloyd.out");

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                d[i][j] = (d[i][j] == 0 && j != i? INF : d[i][j]);
            }
        }

        for (int k = 1; k <= n; k++) {
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= n; j++) {
                    d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
                }
            }
        }
    
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (d[i][j] == INF) {
                    d[i][j] = 0;
                }
                out << d[i][j] << " ";
            }
            out << endl;
        }

        out.close();
    }
};

int main() {
    Task *task = new Task;
    task->solve();
    delete task;
    return 0;
}