• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签: 分治法  

资源简介

笔者用5中方法解决循环赛日程表问题。 一、n=2^k,采用递归,指针数组解决,左上角和左下角填充,剩下的copy。 二、n=2^k,采用递归,指针数组解决,左上角填充,剩下的copy。 三、n为任意数,采用递归,指针数组解决。 四,n为任意数,采用多边形轮转法。 五、n为任意数,是笔者对多边形轮转法的优化。

资源截图

代码片段和文件信息

#include//2018.4.23 黄云华分治法求循环次赛日程表
using namespace std;
void Array_new(int **p_arrayint amount)
{//数据初始化 并构给第一行第一列赋值 
for(int i=0;i {
p_array[i]=new int[amount];
p_array[0][i]=i+1;
p_array[i][0]=i+1;
}
}
void Array_copy(int **p_arrayint a_xint a_yint b_xint b_yint lengthint add=0)
{//数据初始化 并构建一个2*2初始矩阵
for(int i=0j;i for(j=0;j p_array[b_x+i][b_y+j]=p_array[a_x+i][a_y+j]+add;
}
void Game_Table(int **p_arrayint xint yint length)//分治法中的分 
{
if(length==1)
return;
Game_Table(p_arrayxylength/2);//填充左上 
Game_Table(p_arrayx+length/2ylength/2);//填充左下 
Array_copy(p_arrayxyx+length/2y+length/2length/2);//左上拷贝至右下 
Array_copy(p_arrayx+length/2yxy+length/2length/2);//左下拷贝至右上 
}
void show(int **p_arrayint xint yint length)
{
for(int i=xj;i {
for(j=y;j cout< cout<<“\n“;
}
}
int main()
{
int amount;
cout<<“请输入学生总人数\n“;
cin>>amount;
int **p_array=new int*[amount];
Array_new(p_arrayamount);
Game_Table(p_array00amount);
show(p_array00amount);
return 0;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1242  2018-04-25 22:29  循环比赛日程表\hyh_genda.cpp
     文件        3070  2018-04-26 21:06  循环比赛日程表\hyh_genda_any.cpp
     文件        1118  2018-04-25 22:29  循环比赛日程表\hyh_genda_plus.cpp
     文件        1082  2018-04-27 00:28  循环比赛日程表\hyh_genda_polygonal.cpp
     文件        1342  2018-04-27 00:39  循环比赛日程表\hyh_genda_polygonal_plus.cpp
     目录           0  2018-04-27 08:18  循环比赛日程表\

评论

共有 条评论