用于在C++中填充数据的组合

Combinations for filling data in C++

本文关键字:数据 组合 填充 C++ 用于      更新时间:2023-10-16

有人可以帮我解决我们如何在以下情况下想到算法的方法吗:

我有n空格,现在每个空格都可以填充m不同的项目(每个空格的m可以不同)。

我想得到n空间的所有可能组合,其中的每一个都充满了m不同的项目(基本上我们将拥有的总组合数量:m0Cn0 x m1Cn1 x..... (其中C是排列和组合理论中的"组合")

例:

给定3个空白需要填补:第一个缺口(g0)可以选择数字(0 or 1),第二个缺口(g1)可以从(0 to 6)中选择数字),同样第三个缺口(g2)可以从(0 to 6)中选择)

如何获得所有可能的组合?

例如,可以550 g2 g1 g0

的组合

您可以执行一个简单的递归方法,尝试所有可能性:

void f(int pos, const vector<int>& choices, vector<int>* solution) {
  if (pos > choices.size()) {
    HandleNewSolution(*solution);
    return;
  }
  for (int i = 0; i < choices[pos]; ++i) {
    solution->at(pos) = i;
    f(i + 1);
  }
}

要调用它,请设置向量中每个位置的选项数,创建一个向量来保存解决方案并使用位置 0 进行调用。

vector<int> options = {2,3,4,2};
vector<int> solution(4);
f(0, options, &solution);