- 6
- 0
- 约7.53千字
- 约 10页
- 2018-01-07 发布于河南
- 举报
循环赛问题分析与C语言代码-分治法
问题描述:设有n个运动员要进行网球循环赛。设计一个满足以下要求的比赛日程表:
(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能赛一次;
(3)当n是偶数时,循环赛进行n-1天。当n是奇数时,循环赛进行n天。
分析过程:
这个问题的解搜索空间是一个n的全排列。要求的解是其中的n个排列,满足条件:第1列n个元素值按增序排列;每行每列没有相同的数。也是一个幻方(除对角线的和不作要求)的问题。
1.n=1
(表1)
1
2. n=2
(表2)
1 2 2 1
3.n=3,
(1) 添加一个虚拟选手4#,构成n+1=4
(2) 4/2=2,分两组,每组各自安排(1 2),(3 4)
(3)每组跟另一组分别比赛(拷贝)这是四个人比赛的安排
(表3) 4人赛程
1 2 3 4 2 1 4 3 3 4 1 2 4 3 2 1 (4)把虚选手置为0
(表4)3人赛程
1 2 3 0 2 1 0 3 3 0 1 2 0 3 2 1
这是三个人比赛的安排
4. n=4, 见表3
5. n=5, (1)加一个虚选手,n+1=6。安排好6个人的比赛后,把第6个人用0表示即得5人的。
(2) 分成两组(1 2 3) (4 5 6),各3名选手
(3) 依照表4,安排第1组;按表5
原创力文档

文档评论(0)