資源簡介
筆者用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??循環比賽日程表\
- 上一篇:基于python實現巴特沃斯低通濾波
- 下一篇:opengl鼠標交互簡單
評論
共有 條評論