循环赛日程表算法
題目:有n=2^k個運動員要進行循環賽。現要設計一個滿足以下要求的比賽日程表:
??????(1)每個選手必須與其他n-1個選手各賽一次
??????(2)每個選手一天只能賽一次
??????(3)循環賽一共進行n-1天
解題思路:分治策略,先將選手分為2半,第歸地用這種一分為二的策略對選手進行分割,直到只剩2個選手時
算法:
void Table(int k,int[][]a)
{
? int n=1;
? for(int i=1;i<=k;i++)n*2;
? for(int i=1;i<=n;i++)a[1][i];
?? int m=1;
?? for(int s=1;s<=k;s++)
?? {
???? n/=2;
???? for(int t=1;t<=n;t++)
????? for(int i=m+1;i<=2*m;j++)
????? {
???????? a[i][j+(t-1)*m*2]=a[i-m][j+(t-1)*m*2-m];
???????? a[i][j+(t-1)*m*2-m]=a[i-m][j+(t-1)*m*2];
???????? m*=2;
????? }
?? }
}
總結
- 上一篇: 煤炭上市公司有哪些
- 下一篇: 场内货币基金的起投金额是多少