/**回溯函数参数t表示当前处在第几层做抉择,t=1时表示当前在决定是否将第一个物品放入背包*/voidbacktrack(intt){ //叶子节点,输出结果 if(t>n) ...
/*
*回溯函数 参数t表示当前处在第几层做抉择,t=1时表示当前在决定是否将第一个物品放入背包
*/
void backtrack(int t)
{
//叶子节点,输出结果
if(t>n)
{
//如果找到了一个更优的解
if(CurValue>BestValue)
{
//保存更优的值和解
BestValue = CurValue;
for(int i=1; i<=n; ++i)
BestX[i] = x[i];
}
}
else
{
//遍历当前节点的子节点:0 不放入背包,1放入背包
for(int i=0; i<=1; ++i) ????????????
{
x[t]=i; ????????????????
if(i==0) //不放入背包 ??????????
{
backtrack(t+1); ????????????
}
else //放入背包
{
//约束条件:放的下
if((CurWeight+w[t])<=c)
{
CurWeight += w[t];
CurValue += v[t];
backtrack(t+1);
CurWeight -= w[t];
CurValue -= v[t];
}
}
}
}
}
展开