首页 > 分享 > 循环赛日程表问题

循环赛日程表问题

问题描述:

设有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