递归实现循环赛日程表

网友投稿 226 2022-11-01


递归实现循环赛日程表

基本思路

首先将最左边的一列赋值为1,2,3…n 然后用第一列(本算法不用第0行和第0列)将第二列赋值,采取交叉赋值的方法,即用左上方的元素填写右下方,用左下方的元素填写右上方 现在就有2列元素赋值完成,然后以4个元素为一个赋值块进行赋值,依然是交叉赋值,用左上方的元素填写右下方,用左下方的元素填写右上方 。 现在就有4列元素赋值完成,然后以16个元素为一个赋值块进行赋值,依然是交叉赋值,用左上方的元素填写右下方,用左下方的元素填写右上方 。 . . . 依此类推,直到将n维方阵赋值完成,即所有的选手(人数n=2^k)的赛程都安排好

#includeusing namespace std;const int SIZE = 100;/*核心代码*/void fillTable(int x,int y,int step, int **table){ if(step == 1) return ;//此处若step==2,则本函数中再次进入fillTable函数将会直接return,不执行赋值过程 step /= 2;//若此处step==1,将会进行下列的赋值过程 fillTable(x+step,y,step,table);//此处传的x,y都比较小,是用左上方的表格填写右下方的表格 fillTable(x,y,step,table);//x有增量,是用左下方的表格填写右上方的表格 for(int i=0; i>n; //申请空间 int **table; table = new int *[100]; for(int i=0; i<100; i++) table[i] = new int [100]; for(int i=1;i<=n;i++) table[i][1]=i; fillTable(1,1,n,table); show(table,n); //二维数组的delete操作 for(int i=0; i<100; i++) delete []table[i]; delete []table; return 0;}

4 运行结果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:栈的经典用法——判断括号是否匹配
下一篇:浅谈MyBatis3 DynamicSql风格语法使用指南
相关文章

 发表评论

暂时没有评论,来抢沙发吧~