算法设计与分析分治策略之循环赛日程表

分治策略:循环赛日程表

问题描述

循环赛日程表问题,设有n=2k个选手要进行循环赛,设计一个满足以下要求的比赛日程表:
1.每个选手必须与其他n-1个选手各赛一次;
2.每个选手一天只能赛一次;
3.循环赛一共进行n-1天。

问题分析

算法设计与分析分治策略之循环赛日程表_第1张图片
行标(或列标)作为运动员编号

算法设计与分析分治策略之循环赛日程表_第2张图片
整个表格(n*n)的表格是对称的结构
i行(18行)j(17列,行标除外)表示第i个选手第j天的比赛对手

代码

#include 
using namespace std;
#define MAX 100
int a[MAX][MAX];
void Copy(int tox, int toy, int fromx, int fromy, int r){ //一个矩形的拷贝
	for(int i=0;i

算法设计与分析分治策略之循环赛日程表_第3张图片

void Table(int k){ //k为分割次数
	int i,r;
	int n=1; //n为参赛人数
	for(i=1;i<=k;i++)
		n=n*2;
	for(i=0;i

算法设计与分析分治策略之循环赛日程表_第4张图片

int main(){
	Table(3);
	for(int i=0;i<=7;i++)	{
		for(int j=0;j<=7;j++)
			cout<

你可能感兴趣的:(算法设计与分析分治策略之循环赛日程表)