设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:
(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能参赛一次;
(3)循环赛在n-1天内结束。
按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第 i个选手在第j天所遇到的选手。 其中1≤i≤n,1≤j≤n-1。


按分治策略,我们可以将所有的选手分为两半,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定。 这个求解过程是自底向上的迭代过程,其中左上角和左下角分别为选手1至选手4以及选手5至选手8前3天的比赛日程,据此,将左上角部分的所有数字按其对应位置抄到右下角,将左下角的所有数字按其对应位置抄到右上角,这样,就分别安排好了选手1至选手4以及选手5至选手8在后4天的比赛日程。具有多个选手的情况可以依此类推。
这种解法是把求解2k个选手比赛日程问题划分成依次求解21、22、…2k个选手的比赛日程问题,换言之,2k个选手的比赛日程是在2(k-1)个选手的比赛日程的基础上通过迭代的方法求得的。在每次迭代中,将问题划分为4部分:
左上角,左下角,右上角,右下角。

//循环赛日程表p35
#include<iostream>
using namespace std;
int a[100][100];
int n=2;
void init(){a[1][1]=1;a[1][2]=2;a[2][1]=2;a[2][2]=1;
}
void table(int k){init();for(int i=2;i<=k;i++){int t=n;n=n*2;//左下角for(int j=t+1;j<=n;j++){for(int k=1;k<=t;k++){a[j][k]=a[j-t][k]+t;}} //右上角 for(int j=1;j<=t;j++){for(int k=t+1;k<=n;k++){a[j][k]=a[j][k-t]+t;}}//右下角for(int j=t+1;j<=n;j++){for(int k=t+1;k<=n;k++){a[j][k]=a[j-t][k-t];}} }
}
void print(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<a[i][j]<<" ";}cout<<endl;}
}
int main(){int k;cin>>k;table(k);print();return 0;
}
/*
3
*/

2循环赛日程表(分治)相关推荐

  1. 任意人数的循环赛日程表 分治 非分治 c++

    循环赛日程表 要求 设计一个满足以下要求的比赛日程表: 每个选手必须与其他n-1个选手各赛一次: 每个选手一天只能赛一次: 当n是偶数时,循环赛进行n-1天,当n是奇数时,循环赛进行n天: 举例 4位 ...

  2. 循环赛日程表分治递归求解

    设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次: (3)循环赛一共进行n-1天. 按分治策略,将所有的选手分为两半,n个选手的比赛日程 ...

  3. 循环赛日程表 分治(超详细注释!!!)

    设有n=2k个运动员要进行网球循环赛.现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能赛一次: (3)循环赛一共进行n-1天. answe ...

  4. c语言 循环赛日程表 n=2^k,循环赛日程表分治算法(c语言)

    /* * 设有n=2k个运动员要进行网球循环赛.现要设计一个满足以下要求的比赛日程表: * 每个选手必须与其他n-1个选手各赛一次: * 每个选手一天只能参赛一次: * 循环赛在n-1天内结束. * ...

  5. 循环赛日程表------分治算法

    [题目描述] 设有NN个选手进行循环比赛,其中N=2M2M,要求每名选手要与其他N−1N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1N−1天,要求每天没有选手轮空. [输入] 输入:M ...

  6. python【数据结构与算法】循环赛日程表(分治)

    文章目录 1 概述 2 解决 1 概述 设计一个满足以下要求的比赛日程表: 每个选手必须与其他n-1个选手各赛一次: 每个选手一天只能赛一次: 循环赛一共需要进行n-1天. 由于n=2^k个运动员,显 ...

  7. 3.2.4循环赛日程表(递归与分治)

    目录 1.问题描述 2.算法分析 算法 3.摘要 参考书籍 1.问题描述 设有个运动员要进行网球循环赛. 现要设计一个满足以下要求的比赛日程表. (1)每个选手必须与其他个选手各比赛一次: (2)每个 ...

  8. 循环赛日程表 (递归与分治)

    文章目录 1.题目 2.问题分析 3.什么是分治 4.算法实现思路 1.对表进行分析 2.对表的实现 1.递归 2.循环 5算法实现代码 1.递归 2.循环 6.时间\空间复杂度 1.递归 1.空间复 ...

  9. 递归与分治策略算法之循环赛日程表

    递归与分治策略算法之循环赛日程表 1.先简单的来介绍一下分治策略的思想 分治策略的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,分解出来的子问题与原问题相同,并且相互独立.通过递归去解决子 ...

  10. 循环赛日程表问题(分治算法)

    循环赛日程表问题(分治算法) 设有n=2kn=2^kn=2k个运动员要进行网球循环赛.现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n−1n-1n−1个选手各赛一次: (2)每个选手 ...

最新文章

  1. SQL Sever 2008 R2 数据库(2) ——数据库管理
  2. jsp页面取整数 和Java页面取整数
  3. 浅谈数据库优化方案--表和SQL
  4. 配置BGP本地优先级
  5. 在python中使用Ansible实现Devops的相关总结
  6. poj 1160(Post Office)
  7. 5G小科普(漫画版,So easy!)
  8. 【OpenStack】【Keystone】安装与配置详解
  9. hdoj_1421搬寝室
  10. 2021鞍山市高考成绩怎么查询,鞍山师范学院
  11. sql-server-storage-internals
  12. 诺基亚10.22变革影响的分析
  13. windows下ghostscript (gs)安装,环境变量设置,是否安装成功
  14. MTK 6589充电模块分析
  15. 四 解决问题1 只列式不计算机,小学六年级数学下册期末试题人教版
  16. DES加密解密-java
  17. word如何让单页变横向
  18. 从电商到软件市场,阿里双十一战火蔓延
  19. #64-【模拟】屠城(zly#3)
  20. 三步搞定Origin双误差棒画法!

热门文章

  1. 项目管理知识领域--十五至尊图
  2. 解决phpstudy中mysql无法启动,与本地安装的mysql冲突
  3. 独立品牌智能投资顾问公司弘量研究宣布新一轮融资成功
  4. 利其器--我的编程输入法环境(草稿)
  5. iOS11bug html5,iOS 11都有哪些BUG,该怎么解决? - 全文
  6. 【ECharts】百度图表插件ECharts使用
  7. Java TX-LCN:(六)TxManager 搭建
  8. 数据的动态渲染,JSON的运用
  9. GSP序列模式分析算法
  10. Android稳定性系列8 Native crash处理流程