问题描述:
设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程:
每个选手必须与其他n-1个选手各赛一场;每个选手一天只能赛一场;循环赛一共进行n-1天。idea: Divide and conquer
源码如下:
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
#define MAXSIZE 100
void mainlineCopy(int A[][MAXSIZE],int playerNum,int row,int column){
int i,j;
if (playerNum==1) return ;
mainlineCopy(A,playerNum/2,row,column);
mainlineCopy(A,playerNum/2,row,column+playerNum/2);
for(i=row;i<row+playerNum/2;i++)
for(j=column;j<column+playerNum/2;j++)
A[i+playerNum/2][j+playerNum/2]=A[i][j] ;
for(i=row;i<row+playerNum/2;i++)
for(j=column;j<column+playerNum/2;j++)
A[i+playerNum/2][j]=A[i][j+playerNum/2] ;
}
int main (){
int A[MAXSIZE][MAXSIZE]={0,0,0,0};
int index;
int playerNum=1;
int i,j;
printf("Please input the valve of K:");
scanf("%d",&index);
assert(index>0&&index<=5);
for( j=1;j<=index;j++)
playerNum*=2;
for( i=0;i<playerNum;i++)
A[1][i]=i+1;
mainlineCopy(A,playerNum,1,0);
for(i=1;i<=playerNum;i++){
for(j=0;j<playerNum;j++)
printf("%2d ",A[i][j]);
printf("n");
}
}
相关知识
C++
2020年第二十二届北京展同期活动日程表
2016北京花展展商名录(截止至2016年3月14号)
巴黎奥运会乒乓球比赛规则一览
强强对抗冠军花落谁家?《第五人格》2021IVL夏季赛总决赛8月27日开战!
第七届中老越三国丢包狂欢节将于12月举行
花卉问题
通过Salesforce管理员让你的销售人员花更多时间去销售
字符串相关问题
前沿科学问题
网址: 循环赛日程表问题 https://m.huajiangbk.com/newsview153814.html
上一篇: 专家称性爱1小时=慢跑20分钟 |
下一篇: 中考数学, 竞赛复习, △ABC |