我有一个问题,我的回溯功能它循环与某些数据我不能写在这里整个程序代码,但可以把我的功能.
bool shareMoney(int quantity, int *values, int index, int moneyA, int half, bool *ifChosen)
{
if(moneyA == half)
return true;
else if(index >= quantity)
return false;
moneyA += values[index];
if(shareMoney(quantity, values,index+1, moneyA, half, ifChosen))
{
ifChosen[index] = true;
return true;
};
moneyA -= values[index];
if(shareMoney(quantity, values,index+1, moneyA, half, ifChosen))
{
ifChosen[index] = false;
return true;
};
return false;
}
Run Code Online (Sandbox Code Playgroud)
现在这里是解释:
quantity - values中的元素数量数组
值 - 数字数组
index - 用于控制递归的
变量moneyA - 存储元素之和的变量,数组值的
一半 - moneyA在递归完成后应该达到的数字
ifChosen - 布尔元素的数组指数组值
该函数获取值为数组的元素数量,值为一个数组,其中数字从最高到最低排序,索引控制递归,默认为0,因此它从第一个元素moneyA变量开始,该变量存储来自values数组,它应该达到一半,这是从数值数组中取出的数字的一半,ifChosen存储了所选择的数字.
整个函数执行此操作,它将值数组中的元素相加并检查它是否达到了一半,如果它低于一半将其添加到moneyA并标记为ifChosen然后它转到下一个,如果总和高于一半它回来并在ifChosen数组中取消标记并从moneyA中减去.应始终获得最高要素. …