【发布时间】:2014-04-25 16:50:11
【问题描述】:
我正在寻找 C# 中的回溯算法,该算法将从 List<int> 中搜索正确的数字,其中这些数字的总和最接近 X。
例如:list={5,1,3,5}, X = 10 输出应该是 (5,5) (5+5 最接近 10)
它不能是 (3,3,3,1),因为我不能多次使用来自 List 的数字。 (如果我们有 3 号的两块,我们可以使用两次)
例如 2:list={4,1,3,4}, X=10 输出应该是 {4,1,3} 和 {1,3,4}。
我得到了这种代码来启动,但我做不到; (我知道有关于回溯和背包的维基百科,但这对我没有帮助)
static void BackTrack(int lvl, bool Van, int[] E)
{
int i = -1;
do
{
i++;
if (ft(lvl, i))
{
int k = 0;
while (k < szint && fk(E[i], E[k]))
{
k++;
}
if (k == szint)
{
E[k] = R[lvl,i];
if (lvl == E.Length - 1)
{
}
else
{
BackTrack(lvl + 1, Van, E);
}
}
}
}
while (i < E.Length - 1);
}
static bool fk(int nr, int nr2)
{
return (nr + nr2 <= 10);
}
static bool ft(int lvl, int nr)
{
return true;
}
【问题讨论】:
标签: c# sum backtracking knapsack-problem