Cod sursa(job #2611487)

Utilizator mzzmaraMara-Ioana Nicolae mzzmara Data 6 mai 2020 22:51:13
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <bits/stdc++.h> 

const int kNmax = 50009;
#define MAX (1<<30)

struct Edge {
	int x;
	int y;
};

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

 private:
	int n;
    std::vector<std::vector<int>> distances;
   
	void read_input() {
		std::ifstream fin("royfloyd.in");
        
        fin >> n;
        distances = std::vector<std::vector<int>>(n + 1,
            std::vector<int>(n + 1, MAX));

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

		fin.close();
	}

	void get_result() {
        for (int k = 1; k <= n; ++k) {
            for (int i = 1; i <= n; ++i) {
                for (int j = 1; j <= n; ++j) {
                    if (i != j) {
                        distances[i][j] = std::min(distances[i][j], 
                            distances[i][k] + distances[k][j]);
                    }
                }
	
            }
	
        }
	}

    void print_output() {
        std::ofstream fout("royfloyd.out");
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (distances[i][j] == MAX) {
                    fout << "0 ";
                } else {
                    fout << distances[i][j] << " ";
                }
            }
            fout << "\n";
        }
		fout.close();
    }
};

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