Nu aveti permisiuni pentru a descarca fisierul grader_test12.in

Cod sursa(job #1744553)

Utilizator Luncasu_VictorVictor Luncasu Luncasu_Victor Data 19 august 2016 22:35:46
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.31 kb
#include <algorithm>
#include <string>
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <map>
#include <cassert>
#include <ctime>
using namespace std;
 
#ifdef INFOARENA
#define TEST 0
#else
#define TEST 1
#endif

struct Input {
    long long a, b, c;
};

class RoyFloyd {
public:
    void Calculate(vector<vector<int>>& dist) {
        num_values_ = dist[0].size();
        cost_ = vector<vector<int>>(num_values_, 
                       vector<int>(num_values_, kInf));
        for (int i = 0; i < num_values_; ++i) {
            for (int j = 0; j < num_values_; ++j) {
                if (dist[i][j] != 0) {
                    cost_[i][j] = dist[i][j];
                }
            }
        }
        for (int i = 0; i < num_values_; ++i) {
            for (int j = 0; j < num_values_; ++j) {
                for (int k = 0; k < num_values_; ++k) {
                    if (i != k && k != j) {
                        cost_[i][j] = min(cost_[i][j], 
                            cost_[i][k] + cost_[k][j]);
                    }
                }
            }
        }
    }
    void DebugCostMatrix() {
        for (int i = 0; i < num_values_; ++i) {
            for (int j = 0; j < num_values_; ++j) {
                if (cost_[i][j] == kInf) {
                    printf("0 ");
                } else {
                    printf("%d ", cost_[i][j]);
                }
            }
            printf("\n");
        }
    }
private:
    int num_values_;
    vector<vector<int>> cost_;
    const int kInf = 0xFFFFFFF;
};
 
int main() {

    vector<vector<int>> dist;

    if (!TEST) {
        dist.push_back({0,3,9,8,3}); 
        dist.push_back({5,0,1,4,2}); 
        dist.push_back({6,6,0,4,5});
        dist.push_back({2,9,2,0,7});
        dist.push_back({7,9,3,2,0});
    } else {
        freopen("royfloyd.in","r",stdin);
        freopen("royfloyd.out","w",stdout);
        int num_values;
        scanf("%d", &num_values);
        dist = vector<vector<int>>(num_values, 
                      vector<int>(num_values, 0));
        for (int i = 0; i < num_values; ++i) {
            for (int j = 0; j < num_values; ++j) {
                scanf("%d", &dist[i][j]);
            }
        }
    }

    RoyFloyd *instance = new RoyFloyd();
    instance->Calculate(dist);
    instance->DebugCostMatrix();

    return 0;
}