一、 算法描述
void BackTrace(int k)//回溯算法描述
{
if (k>number)
{
for (int i=1;i<=number;i++)
{
bestOrder[i]=xOrder[i];
}
bestValue=xValue;
}
else
{
for (int i=k;i<=number;i++)
{
f1+=x1[xOrder[i]];
f2[k]=(f2[k-1]>f1?f2[k-1]:f1)+x2[xOrder[i]];
xValue+=f2[k];
swap(xOrder[i],xOrder[k]);
if (xValue<bestValue)
{
BackTrace(k+1);
}
swap(xOrder[i],xOrder[k]);
xValue-=f2[k];
f1-=x1[xOrder[i]];
}
}
}
二、 算法分析
回溯法,也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进, 不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:
1、