[算法之分治法应用] 循环赛日程表

本文介绍了如何运用分治策略为n位选手的网球循环赛制定比赛日程表,确保每位选手在n-1天内与其他n-1位选手各比赛一场,且每天仅赛一场。通过逐步分解,最终实现从两位选手的比赛日程扩展到全部选手的日程。文章提供了一个具体的例子,展示了当n=8时的日程表,并给出了相应的C语言代码实现。
摘要由CSDN通过智能技术生成
问题描述:
   设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他
n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程:
 (1) 每个选手必须与其他n-1个选手各赛一场;
 (2) 每个选手一天只能赛一场;
 (3) 循环赛一共进行n-1天。

 编程思想:
     假设n位选手被顺序编号为1,2,...,n,比赛的日程表是一个n行n-1列的表格,i行j列的表格内容是第i号选手在第j天的比赛对手。
     根据分而治之的原则,可从其中一半选手(2^(n-1位)的比赛日程,导出全体n位选手的日程,最终细分到只有两位选手的比赛日程出发。
 
    编程图例: n=8          =====================================================================
 |*|  选手  1天    2天      3天      4天     5天      6天      7天  |*|    =====================================================================
 |*| 1号 |   2   |   3   |   4   ||   5   |   6   |   7   |   8   |*|
 |*| 2号 |   1   |   4   |   3   ||   6   |   7   |   8   |   7   |*|
 |*| 3号 |   4   |   1   |   2   ||   7   |   8   |   5   |   6   |*|
 |*| 4号 |   3   |   2   |   1   ||   8   |   5   |   6   |   5   |*|

 |*| 5号 |   6   |   7   |   8   ||   1   |   4   |   3   |   2   |*|
 |*| 6号 |   5   |   8   |   7   ||   2   |   1   |   4   |   3   |*|
 |*| 7号 |   8   |   5   |   6   ||   3   |   2   |   1   |   4   |*|
 |*| 8号 |   7   |   6   |   5   ||   4   |   3   |   2   |   1   |*|
=======================================================================

//  代码如下:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值