pascal赛程问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 14:40:36
赛程问题。有n个编号为1到n的运动员参加某项运动的单循环比赛,即每个运动员要和所有其他运动员进行一次比赛。试为这n个运动员安排一个比赛日程,使得每个运动员每天只进行一场比赛,且整个比赛在n-1天内结束。输入运动员人数n(n<=10000),输出一个n阶方阵A[1..N,0..N-1],当J>0时,A[1,J]表示第1名运动员在第J天的比赛对手。
【分析提示】由于N个运动员要进行单循环比赛,且在N-1天内要结束全部比赛,经过分析,当且仅当N为2的整次幂时,问题才有解,当然解是不惟一的。
我的问题:为什么n必须为2的整次幂,n=6也行啊(如:第一天:(1,2),(3,5),(4,6);第二天:(1,3),(2,6),(4,5);第三天:(1,4),(2,3),(5,6);第四天:(1,5);(3,6),(2,4);第五天:(1,6),(3,4),(2,5);(括号内为对阵双方的选手号码)。请高手们解答!!?

明显的应该用分治做
观察下面的
设n=4
1 2 3 4
2 1 4 3
3 4 1 2
4 3 2 1
整个图可以分成4个部分
2行2列为一个部分

12 34
21 43

34 12
43 21
这样就具有对称性了
然后用递归做即可
详见《数据结构与算法设计——pascal语言》一书,在p192

贪心就行了。

我怎么看起来好像奇数不行,偶数都行啊