2.8 赛程安排
2.8.1 问题描述
n(n=2k)个选手参赛,设计一个满足以下要求的比赛日程表:
- 每个选手必须与其他n-1个选手各比赛一次;
- 每个选手一天只能比赛一次;
- 循环赛一共进行n-1天。
我们需要得出如下这样的的赛程表:
2.8.2 算法思路
整体思路:由赛程表我们可以看出,赛程表分为四大区域,我们要做的是,
- 将左上角的内容复制到右下角
- 左上角的内容加上n/2得到左下角
- 左下角复制到右上角
区域不断以2指数倍增大,并不断重复上述步骤,最终填满整张表。
2.8.3 代码实现
1 | public static int[][] getSchedule(int k) { |