问题描述:

非递归方案一:代码

#include<bits/stdc++.h>
using namespace std;void gameTable(vector<vector<int>> &vec,int k)
{int i=0,j=0;//二维数组的下标,行,列 int temp;//需要新安排选手数目 int n;//当前的选手数目 //先初始化一个两人的比赛表n=2; //k=1两个参赛选手日程可以直接求得vec[1][1]=1;vec[1][2]=2;vec[2][1]=2;vec[2][2]=1;//关键的大循环 for(int x=1;x<k;x++)//安排2^x个选手的日程表 {temp=n;//多了temp个选手  已建立了temp个选手的表 n*=2;//目前选手的数量//安排左下角的比赛日程 for(i=temp+1;i<=n;i++)//左下角的行 {for(j=1;j<=temp;j++)//左下角的列 vec[i][j]=vec[i-temp][j]+temp;//同一列的第i-temp行(从上到下依次对应)的值加上新增数temp  }//安排右上角的比赛日程 for(i=1;i<=temp;i++)//右上角的行 {for(j=temp+1;j<=n;j++)//右上角的列 vec[i][j]=vec[i+temp][j-temp];}//安排右下角的比赛日程 for(i=temp+1;i<=n;i++)//右下角的行 {for(j=temp+1;j<=n;j++)//右下角的列 vec[i][j]=vec[i-temp][j-temp];} } cout<<"(第i行第j列表示和第i个选手在第j天比赛的选手序号)"<<endl;for(i=1;i<=n;i++)//画表 {for(j=1;j<=n;j++){cout<<setw(3)<<vec[i][j];}cout<<endl;}}int main()
{cout<<"比赛选手个数为n(n=2^k),请输入参数K(K>0):";int k;cin>>k;int num=1;for(int i=0;i<k;i++){num*=2;}//stl的二维的vector需要初始化后才可以使用 vector<vector<int>> vec(num+1, vector<int>(num+1));gameTable(vec,k);return 0; }

for(int x=1;x<k;x++)//安排2^x个选手的日程表
//stl的二维的vector需要初始化后才可以使用
vector<vector> vec(num+1, vector(num+1));


方案二:使用递归来解决

#include<bits/stdc++.h>
using namespace std;void Copy(int **a,int cow,int col,int cow2,int col2,int k)
{for(int i=0;i<k;i++){for(int j=0;j<k;j++){a[cow2+i][col2+j]=a[cow+i][col+j];}}
}
void table(int **a,int cow,int col,int k)//k为参加比赛的总人数
{if(k==1)return ;else{//填充左上角的比赛进程table(a,cow,col,k/2); //填充左下角的比赛进程table(a,cow+k/2,col,k/2); //将左下角的信息复制到右上角的比赛进程Copy(a,cow+k/2,col,cow,col+k/2,k/2);//将左上角的信息复制到右下角的比赛进程 Copy(a,cow,col,cow+k/2,col+k/2,k/2);}
} int main()
{int k;cout<<"输入k(n=2^k):";cin>>k;int num=1;for(int i=0;i<k;i++){num=num*2;}//输入运动员的人数int ** p =new int*[num];//赛程表初始化for (int i = 0; i < num; i++){p[i] = new int[num];p[0][i] = i+1;p[i][0] = i+1;}//运行函数table(p,0,0,num);//输出结果cout<<"循环赛日程表(递归法):"<<endl;for(int i=0;i<num;i++){for(int j=0;j<num;j++){cout<<setw(3)<<p[i][j];}cout<<endl;}return 0;
}

动态开辟空间
int *p = new int[m]; //开辟行
for(int i = 0; i < m; i++)
p[i] = new int[n]; //开辟列

算法设计与分析——递归与分治策略——循环日程赛相关推荐

  1. 算法设计与分析——递归与分治策略——全排列

    算法设计与分析--递归与分治策略--全排列 全排列问题的解决是通过分治与递归思想来解决的 首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列. 如果没有到达最后一位,则循环的 ...

  2. 算法设计与分析——递归与分治策略——最接近点对问题

    [问题描述] 最近对问题要求在包含有n个点的集合S中,找出距离最近的两个点.设 p1(x1,y1),p2(x2,y2),--,pn(xn,yn)是平面的n个点. 严格地将,最近点对可能不止一对,此例输 ...

  3. 算法设计与分析——递归与分治策略——线性时间选择

    顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...

  4. 算法设计与分析——递归与分治策略——棋盘覆盖

    问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...

  5. 算法设计与分析——递归与分治策略——快速排序

    快速排序--递归算法 处理i,j的先后顺序不能改变 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达 ...

  6. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  7. 【算法设计与分析】15 分治策略:芯片测试

    上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...

  8. 【算法设计与分析】13 分治策略的设计思想

    算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录 1. 分治策略的基本思想 1.1 二分检索的设计思想 1.2 二分归并排序的设计 ...

  9. 算法设计与分析——递归与分治——归并排序

    归并排序采用的是一种分治的思想,如下图,先将要排序的元素分为两块,每个块又开始分裂,然后逐个按照特定顺序合并,合成最后我们需要的数组. 归并排序的复杂度: 时间复杂度:O(nlogn) 空间复杂度:O ...

最新文章

  1. y430p linux无线网卡,centOS7.5安装BCM43142无线网卡驱动(如,联想Y430P)
  2. 脑机接口:从基础科学到神经康复
  3. [转]html超链接打开的窗口大小
  4. python表单处理_python flask 表单处理Flask-WTF
  5. USB Flash Drives
  6. 同步、互斥锁、死锁、异步
  7. 硬件故障-笔记本电脑开不了机故障处理
  8. asp.net 小记
  9. 《统计学习方法》读书笔记——感知机(原理+代码实现)
  10. 1030: [JSOI2007]文本生成器 ac自动机+dp
  11. 多线程开发必须知道的概念
  12. 破解含语序问题的点击验证码
  13. python随机分组的思路_一个关于随机分组需求的Python方案与思考
  14. 工作-safari时间格式
  15. 腾讯TCA一些笔记,只敲了前几章,以官方文档和教学为主
  16. 32位和64位系统对于程序员的影响
  17. 如何学习SDN及网络自动化
  18. Python与C++语法比较--字符串篇
  19. 郑豪8.6非农数据提前布局,黄金是延续跌势还是多头反击?美盘操作建议
  20. Android 中的 AccountManager getAuthToken 问题

热门文章

  1. visual studio 2017发布dotnet core到docker
  2. netcore - MVC的ActionFilter的使用
  3. 采用MiniProfiler监控EF与.NET MVC项目
  4. Android 发起加入QQ群、打开网址、启动拨打电话界面
  5. .net 服务器端自定义分页控件 简单示例
  6. 学习SQL数据更新,这一篇就够了!
  7. C#正则表达式判断输入的是不是数字
  8. solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念
  9. sql drop 简单操作(Mysql)
  10. java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum