首页 > 解决方案 > 降低从排列到组合的复杂性

问题描述

假设我有 6 个图像部分,在正确排列时形成一个图像。还假设我有两对零件,它们的位置可以互换,并且仍然可以形成相同的图像。现在,我想要所有可能的组合而不需要排列。我想从第一个地方开始,检查有多少部分适合那个地方,然后逐渐向最后一个地方移动。

List<List<int>> possible_combinations = new List<List<int>>();
    for (int i = 0; i <= 6; i++)
        {
           foreach (var comb in possible_combinations)
              {
                 List<int[]> best_combination = new List<int[]>();
                 for (int p = 0; p < comb.Count; p++)
                      best_combination.AddRange(allStrokes[comb[p]]);
                 if (!comb.Contains(i))
                 {
                     best_combination.AddRange(allStrokes[i]);
                     var fits = cs.checkFeasibility(best_combination);
                     if (fits)
                        comb.Add(i);
                 }
             }
         }

可能的组合已经可能包含所有第一个可能的部分图像 id。检查可行性将检查新组合的部分是否会改善迄今为止的结果。我怎样才能做到这一点。特此代码供理解参考。

标签: c#algorithm

解决方案


推荐阅读