【发布时间】:2016-05-28 20:35:19
【问题描述】:
我使用 C++ 的 Backtracking of Knapsack 解决方案。我又从这里得到了解决方案。 Knapsack solution with Backtraking in c++ 我的编译器在行移动时出错。有没有不使用移动的解决方案?不使用move如何修改代码?
#include<iostream>
#include<vector>
using namespace std;
int weights[] = {2, 3, 1}, values[] = {6, 15, 7};
int solution = 0, n = 3;
std::vector<int> vsol;
std::vector<int> temp;
bool issol;
void Knapsack (int i, int max, int value)
{
for (int k = i; k < n; k++) {
if ( max > 0)
{
if (weights[k] <= max)
{
temp.push_back(k);
if (value+ values[k] >= solution)
{
solution = value + values[k];
issol = true;
}
}
if ( (k+1) < n)
{
Knapsack (k+1, max - weights[k], value + values[k]);
}
else
{
if (issol == true)
{
if (! vsol.empty()) vsol.clear();
std::move(temp.begin(), temp.end(), std::back_inserter(vsol));
temp.clear();
issol = false;
} else temp.clear();
return;
}
}
else
{
if (issol == true)
{
if (! vsol.empty()) vsol.clear();
std::move(temp.begin(), temp.end(), std::back_inserter(vsol));
temp.clear();
issol = false;
} else temp.clear();
return;
}
}
}
int main()
{
Knapsack(0, 2, 0);
cout << "solution: " << solution << endl;
for(vector<int>::iterator it = vsol.begin(); it != vsol.end(); it++)
cout << *it << " ";
return 0;
}
【问题讨论】:
-
您是否加入了
<algorithm>?您是否在编译器中启用了 C++11 模式? -
是的,我也尝试了实用程序,但没有任何区别。
-
请edit 你的问题提供minimal reproducible example(如果你想让
move工作,主要是)。 -
我编辑了我的问题。我试图解释得更清楚。我希望现在没事。 @鲍姆米特奥根
标签: c++ c++11 c++builder backtracking knapsack-problem