【问题标题】:Find combination of numbers with backtrack查找带有回溯的数字组合
【发布时间】: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


    【解决方案1】:

    从我正在阅读的内容来看,这个例子:

    例如 2:list={4,1,3,4}, X=10 输出应该是 {4,1,3} 和 {1,3,4}。

    输出应该是 {4,1,4} 9 比 8 更接近。

    这就是我所做的。它适用于您提供的两个示例。

    public List<int> highest(List<int> list, int number)
        {
            //probably a better way to do this
            IEnumerable<int> orderedList = list.OrderByDescending(item => item);
    
            var currentNumber = 0;
            List<int> combinationResult = new List<int>();
            foreach (var item in orderedList)
            {
                var temp = currentNumber + item;
                if (temp <= number)
                {
                    combinationResult.Add(item);
                    currentNumber = temp;
                }
            }
            return combinationResult;
        }
    

    【讨论】:

    • 我刚刚看到,它给出了正确的数字,但我需要回溯:(
    • 回溯是什么意思?
    • 用递归算法找到没有排序的数字。 link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多