问题描述:有2的n次方个运动员,需要在(2的n次方)-1天内完成比赛。比赛规则如下:
1)一位运动员每天只能与一位运动员比赛
2)一位运动员要与其他n-1为运动员进行比赛
问如何安排日程?
问题实质:要求矩阵内每行每列都不重复。
基本思路:将所有运动员分为两半
对这两半分别独立进行日程安排;
然后将这两半分别移到相应的矩阵对角位置。
核心代码:
void range_shedule(int low,int hig)
{
if(low!=hig)
{
int md;
md=(low+hig-1)/2;
range_shedule(low,md);
range_shedule(md+1,hig);
//将左上角的矩阵复制到右下角
//将左下角的矩阵复制到右上角
copy(low,hig);
}
}