diff --git a/sa.hpp b/sa.hpp index 2f86bb7..f28a5c0 100644 --- a/sa.hpp +++ b/sa.hpp @@ -58,25 +58,28 @@ class solution { its.insert(i); } + this->items.resize(items.size()); + size_t i = 0; + long long cap = capacity; - while (!its.empty()) { - auto itr = its.upper_bound(cap); - if (itr == its.begin()) { - cap = capacity; - cap -= *its.begin(); - this->items.push_back(*its.begin()); - its.erase(its.begin()); - continue; - } - itr--; - cap -= *itr; - this->items.push_back(*itr); - its.erase(itr); - } + while (!its.empty()) { + auto itr = its.upper_bound(cap); + if (itr == its.begin()) { + cap = capacity; + cap -= *its.begin(); + itr = its.begin(); + } else { + itr--; + cap -= *itr; + } + this->items[i] = *itr; + its.erase(itr); + i++; + } - fitness = calculate_boxes(); - } + fitness = calculate_boxes(); + } void setneighbor() { // Gera um vizinho da solução std::uniform_int_distribution<> dist(0, items.size() - 1);