循环赛日程表(分治)

本文介绍了如何设计一个循环赛日程表,满足每个选手与n-1个选手比赛且每天仅比赛一场的条件。通过分治策略,将n个选手不断分组,直至每组两人,然后进行比赛安排。代码展示和实例输出详细解释了这一过程。
摘要由CSDN通过智能技术生成

题目:

有n=2^k个远动员选手,设计比赛日程表实现:
(1)每个选手必须与n-1个选手比赛
(2)每个选手一天只比赛一场
(3)比赛共进行n-1天

题意:略。

思路:

把n个选手分成两组,每组内进行比赛安排,每组内的安排又要继续分成两组,直到组内仅有两人,那么就是安排这两个人进行比赛,这也就是最小子问题。用递归直到最底层设初值,逐层赋值,二维数组打出表来。

代码:

#include <bits/stdc++.h>

using namespace std;
const int maxn=2000;
int a[maxn][maxn],n;
void Table(int m)
{
    if(m>1)
    {
        Table(m/2);
        for(int i=1; i<=m; i++)
            for(int j=1; j<=m; j++)
            {
                a[m+i][j]=a[i][j]+m;
                a[i][m+j]=a[i][j]+m;
                a[m+i][m+j]=a[i][j];
            }
    }
    else
    {
        a[1][1]=1;
        a[1][2]=2;
        a[2][1]=2;
        a[2][2]=1;
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值