用于在C++中填充数据的组合
Combinations for filling data in C++
有人可以帮我解决我们如何在以下情况下想到算法的方法吗:
我有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);
相关文章:
- 如何遍历几个每小时一次的根(.root)文件,并将它们组合成更大的每日数据.root文件?
- 选择和 UDP 协议组合时无法接收数据
- TCP 数据包有时会被组合(并延迟?
- 组合来自多个线程的数据的标准方法?
- 多种搜索组合的数据结构设计
- 数据的所有组合都是产品的两个整数
- 在组合数据时不可能是恒定正确的,并且它是锁定的?
- 如何使用Google测试进行C 通过数据组合运行
- 如何使用某些MPI命令(或组合命令)之间在两个处理器之间交换2D数组中存储的数据
- 在不更改数据类型的情况下可逆地组合两个uint32_t
- C++组合2个数组,数据有序
- 使用在组合类中计算的数据构造成员类
- STL容器,用于在C++中组合多个非常大的光栅数据文件
- 组合框中文本文件中的数据
- 用于在C++中填充数据的组合
- 我应该如何使用 std::map<> 来聚合/组合存储在数组C++中的数据?
- 组合常量和非常量引用数据成员的单个类
- 对于巨大的数据集,从m个数组的元素组合中提取n个最低和
- 将不同的数据类型组合成一个void类型
- 具有固定字符串列表和自定义数据的WinAPI组合框