递归分治解循环赛问题

问题描述:
n=2 k 个运动员进行“ 地表最强 16 ”循环赛,日程满足:
每个选手必须与其他 n-1 个选手比赛一次;
每个选手一天只能赛一次;
循环赛一共进行 n-1 天。
实验要求
输入: n—— 参加循环赛的运动员人数
输出:日程表的详细安排(行:运动员;列:一天;间隔: /t 保存结果(学号 + _ 循环赛” +.txt
程序:分治过程必须通过递归函数 Scheduled( int i , int size) 表达

          其中 i表示目前正在解决的日程表起始位置 size代表需要解决的大小

注:调用过程禁止直接写在主函数中!
因为老师要求特殊,没什么可以参考的程序,便自己研究研究写了一个,基本上自己的算法实验都是晚上在没人的地方研究一晚上便搞出来的。
#include
#define N 100
int a[N][N];

void Scheduled(int i,int size)
{
	int x,y;
	if(size == 2)// size=2是最小问题,判断是否是最小的终止条件,是就赋值(事实赋值了第一列)
	{
		a[i][1]=i;
		a[i+1][1]=i+1;
		//return;
	}
	else{
		Scheduled(i,size/2);//左上部分的递归完成第一列
		Scheduled(i+size/2,size/2);//左下部分的递归完成第一列
	}

	for(x=i;x


你可能感兴趣的:(C,算法)