分治法——循环赛日程表

本文介绍了如何运用分治法解决有2的幂次个运动员的羽毛球循环赛日程表设计问题。每个选手需与其他选手比赛一次,每天最多一场比赛,共需进行n-1天。通过将问题一分为二,再进行合并,找到制定比赛日程的规律,并提供了代码实现和测试过程。
摘要由CSDN通过智能技术生成

问题描述

设有n=2k个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表:
(1)每个选手必须与其它n-1个选手各赛一次;
(2)每个选手一天只能比赛一次;
(3)循环赛一共需要进行n-1天。
由于n=2^k,显然n为偶数。
按分治策略,将所有的选手分为两半,n个选手的比赛日程表就可以通过为n/2个选手设计的比赛日程表来决定。递归地用对选手进行分割,直到只剩下2个选手时,比赛日程表的制定就变得很简单。这时只要让这2个选手进行比赛就可以了。
八人循环赛

分治法求解思路

(1)如何分,即如何合理地进行问题的分解?
一分为二
(2)如何治,即如何进行问题的求解?
进行合并
(3)问题的关键——发现循环赛日程表制定过程中存在的规律性。

循环赛日程表算法描述:

Void Round_Robin_Calendar(int k, int **a)
{     int n=1,i,j,s;
       n = 1<<k;
       for(i=1;i<=n;i++)  a[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值