Cod sursa(job #2611501)

Utilizator RaduNichitaRadu Nichita RaduNichita Data 6 mai 2020 23:04:14
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
// Copyright Radu Nichita 2020 [email protected] 	

#include <bits/stdc++.h>
#define NMAX 102
#define kINF (1<<30)
#define NO_PARENT -1

using namespace std;
	
class Task {

    int N;

    
    int d[NMAX][NMAX];

 
	
    void read_input() {
        int src, dst, cost;
        std::ifstream in("royfloyd.in");
        in >> N; // dimensiune graf 
        for (int i = 1; i <= N; i++) {
           for (int j = 1; j <= N; j++) {
                int c;
                in >> c;
                if (c == 0) {
                   d[i][j] = kINF;
                } else {
                    d[i][j] = c;
                }
            }
        }

        in.close();
    }
	
 
	
    void getResult() {
       RoyFloyd();
    }


    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 && d[i][k] + d[k][j] < d[i][j] && d[k][j] != kINF) {
                        d[i][j] = d[i][k] + d[k][j];
                    }
                }
            }
        }
    }
	
 
	
    void print() {
        std::ofstream out("royfloyd.out");  
        for (int i = 1; i <= N; i++) {
            for (int j = 1; j <= N; j++) {
                if (d[i][j] == kINF) {
                    out<<"0 ";
                } else {
                    out<<d[i][j]<<" ";
                }
            }
            out<<"\n";
        }
    
        out.close();
        return;
    }
	
 
	
 public:
	
    void solve() {
        read_input();
        RoyFloyd();
        print();
    }
	
 
	
};
	
 
	
int main() {

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