我一直在搜索使用 C++ 生成组合的源代码。我为此找到了一些高级代码,但这仅适用于特定数量的预定义数据。任何人都可以给我一些提示,或者可能是产生组合的一些想法。举个例子,假设集合 S = { 1, 2, 3, …., n} 我们从中挑选出 r=2。输入将是 n
和 r
。在这种情况下,程序将生成长度为 2 的数组,如 5 2 输出 1 2、1 3 等。我很难构造算法。我花了一个月的时间思考这个问题。
原文由 Keneth Adrian 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
std::next_permutation
的简单方法:或以更易于遵循的顺序输出结果的轻微变化:
一点解释:
它通过创建一个“选择数组”(
v
)来工作,我们在其中放置r
选择器,然后我们创建这些选择器的所有排列,如果它被选中则打印相应的集合成员在v
的当前排列中。希望这可以帮助。