1.问题描述:
给定N个数(N是偶数),给它们进行两两组合并列举所有可能的轮数,每一轮的组合不可以一样,并且两个元素只允许组合一次。
比如N是4,有A,B,C,D共4个元素,那么可以共有3轮组合,分别是:
第一轮 | 第二轮 | 第三轮 |
---|---|---|
A-B,C-D | A-C,B-D | A-D,B-C |
从第四轮开始要开始重复了,因此这里不重复组合的最大轮数是3
输入是一个含有偶数元素的列表,输出是排好之后的每一轮。
2.问题分析
首先要明确组合的规律,也可以说是条件:
- 条件1:每轮都包含N个元素,而且只包含N个元素
- 条件2:每轮有N/2对组合
- 条件3:不重复的轮数是N-1,因为每个人都会与其他的N-1个人pair,一共是N-1轮
可以使用回溯法来解决问题,思路是:
- 1.列举所有可能的组合,比如N=4时,所有的组合是A-B, A-C, A-D,B-C, B-D, C-D
- 2.从中选出一对组合加入到当轮的组合安排中,选完一个组合后,就有相关组合的不能再选,比如选了A-B,不能选的就是:A-C, A-D,B-C, B-D
- 3.选完之后要检查是否满足条件