Cod sursa(job #2198436)

Utilizator avladulescuVladulescu Alexandru avladulescu Data 24 aprilie 2018 15:18:46
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <climits>

using namespace std;

const int kNmax = 105;

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

 private:
	int n;
	int d[kNmax][kNmax];

	void read_input() {
		ifstream fin("royfloyd.in");
		fin >> n;
		for (int i = 1 ; i <= n ; i++) {
      for (int j = 1; j <= n ; j++) {
         fin >> d[i][j];
         if (d[i][j] == 0 && i != j)
            d[i][j] = INT_MAX/2;
      }
		}
		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++)
          d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
	}

	void print_output() {
		ofstream fout("royfloyd.out");
    for (int i = 1 ; i <= n ; i++) {
      for (int j = 1; j <= n ; j++) {
        if (d[i][j] != INT_MAX/2)
          fout << d[i][j] << " ";
        else
          fout << "0";
      }
      fout << "\n";
		}
		fout.close();
	}
};

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