Nu aveti permisiuni pentru a descarca fisierul grader_test12.in
Cod sursa(job #1744553)
Utilizator | 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;
}