编码方式修改
This commit is contained in:
@@ -39,7 +39,7 @@ LinSolver::LinSolver() :
|
|||||||
sv::LinSolver::~LinSolver()
|
sv::LinSolver::~LinSolver()
|
||||||
{
|
{
|
||||||
for (auto& var : vars) {
|
for (auto& var : vars) {
|
||||||
delete[] var.second; // <20>ͷ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD>
|
delete[] var.second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,12 +54,12 @@ LinSolver& sv::LinSolver::operator=(const LinSolver& solver)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
for (auto& var : vars) {
|
for (auto& var : vars) {
|
||||||
delete[] var.second; // <20>ͷ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ڴ<EFBFBD>
|
delete[] var.second;
|
||||||
}
|
}
|
||||||
vars.clear();
|
vars.clear();
|
||||||
vars.reserve(solver.vars.size());
|
vars.reserve(solver.vars.size());
|
||||||
for (auto& var : solver.vars) {
|
for (auto& var : solver.vars) {
|
||||||
vars.push_back(std::pair(var.first, new Var[var.first]));
|
vars.push_back(std::make_pair(var.first, new Var[var.first]));
|
||||||
for (int i = 0; i < var.first; i++) {
|
for (int i = 0; i < var.first; i++) {
|
||||||
vars.back().second[i] = var.second[i];
|
vars.back().second[i] = var.second[i];
|
||||||
}
|
}
|
||||||
@@ -81,14 +81,14 @@ Var* LinSolver::addVars(int num, VarType type)
|
|||||||
for (int c = 0; c < num; c++) {
|
for (int c = 0; c < num; c++) {
|
||||||
var[c].col = c + cn, var[c].type = type;
|
var[c].col = c + cn, var[c].type = type;
|
||||||
}
|
}
|
||||||
vars.push_back(std::pair(num, var));
|
vars.push_back(std::make_pair(num, var));
|
||||||
cn += num;
|
cn += num;
|
||||||
return vars.back().second;
|
return vars.back().second;
|
||||||
}
|
}
|
||||||
|
|
||||||
Var& sv::LinSolver::getVar(int idx)
|
Var& sv::LinSolver::getVar(int idx)
|
||||||
{
|
{
|
||||||
assert(idx >= 0 && idx < cn); // <20><><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
assert(idx >= 0 && idx < cn);
|
||||||
static Var err_var;
|
static Var err_var;
|
||||||
for (auto& var : vars) {
|
for (auto& var : vars) {
|
||||||
if (var.first <= idx) {
|
if (var.first <= idx) {
|
||||||
@@ -382,7 +382,7 @@ rtn LinSolver::feasible_solution()
|
|||||||
rtn LinSolver::_pivot(pair<size_t, size_t>& p)
|
rtn LinSolver::_pivot(pair<size_t, size_t>& p)
|
||||||
{
|
{
|
||||||
p = make_pair(0, 0);
|
p = make_pair(0, 0);
|
||||||
double cmin = INT_MAX;
|
double cmin = DBL_MAX;
|
||||||
vector<double> coef = ope_table.front();
|
vector<double> coef = ope_table.front();
|
||||||
|
|
||||||
// === <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ ===
|
// === <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ ===
|
||||||
@@ -395,7 +395,7 @@ rtn LinSolver::_pivot(pair<size_t, size_t>& p)
|
|||||||
if (cmin >= 0) {
|
if (cmin >= 0) {
|
||||||
return OPTIMAL;
|
return OPTIMAL;
|
||||||
}
|
}
|
||||||
double bmin = INT_MAX;
|
double bmin = DBL_MAX;
|
||||||
for (size_t row = 1; row < bn; row++) {
|
for (size_t row = 1; row < bn; row++) {
|
||||||
double tmp = ope_table.at(row).front() / ope_table.at(row).at(p.second);
|
double tmp = ope_table.at(row).front() / ope_table.at(row).at(p.second);
|
||||||
if (ope_table.at(row).at(p.second) > 0 && bmin > tmp) {
|
if (ope_table.at(row).at(p.second) > 0 && bmin > tmp) {
|
||||||
@@ -404,7 +404,7 @@ rtn LinSolver::_pivot(pair<size_t, size_t>& p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (abs(bmin - INT_MAX) < 1e-10) {
|
if (abs(bmin - DBL_MAX) < 1e-10) {
|
||||||
return UNBOUNDED;
|
return UNBOUNDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user