如何生成配对的所有组合?例如,如果我有1, 2, 3, 4
我要生成生成配对的所有组合
(1, 2), (3, 4)
(1, 3), (2, 4)
(1, 4), (2, 3)
我首先想到的是递归生成一对,并尝试从剩余的号码加入对。但是,这会导致重复,因为即使要添加的对是唯一生成的,也会生成(1, 2), (3, 4)
以及(3, 4), (1, 2)
。然后我可以删除所有重复的东西,但有一个更清洁的算法?
我的伪代码尝试:
add_pair(current list, remaining nums)
generate pairs from remaining nums
for every pair generated:
remove numbers used in pair from remaining nums
add pair + add_pair(current list, remaining nums) to current list
我不是很舒服的递归又那么这可能会无法正常工作。在其他地方提到的另一种解决方法是回溯,但我不确定这将如何有效地使用。
'(1,2)'出现在'1,2,3,4,5,6'的输出中多少次? – 2014-10-05 01:20:19
你是在问一个特定的[tag:C++]代码的问题,还是只针对一般的算法?如果是后者,则删除C++标记,并最终为已经制定的内容提供一些伪代码。 – 2014-10-05 01:20:52
@DavidEisenstat我认为这将是3:'(1,2)'和3,4,5,6''3'3'3'重排[ – qwr 2014-10-05 01:29:33