给定一组 12 个整数,如何递归生成所有可能的 4 组 3 个整数?C++

Given a set of 12 integers, how to recursively generate all possible 4 groups of 3? C++

本文关键字:整数 有可能 C++ 一组 何递归 递归      更新时间:2023-10-16

例如给定集合{1,2,...,11,12},一个可能的 4 组 3 是

(12, 1, 7)(3, 6, 9)(4, 11, 2)(10, 8, 5)

想想阶乘计算是如何工作的 - 如果你想要所有可能的排列,你会计算n!,因为这是选择第一个元素的方法的数量,乘以之后选择第二个元素的方法的数量,依此类推。这应该很容易实现,循环实际上涵盖了所有可能性,并递归构建了所有这些排列。

在(或期间)为一行中所有可能的元素选择排列之后,您只需要消除冗余的可能性 - 一个或多个三元组是另一个的简单洗牌,以及所有三元组都相同但 4 组排序不同的那些。

实现此目的的一种简单方法是在内部对每个组进行排序(即 (12 2 1) (5 4 2) .. --> (1 2 12) (2 4 5) .. ),并根据每个组的第一个元素再次排序,然后遍历排列列表并消除连续的相同元素