#H22. 循环赛日程表

循环赛日程表

题目描述

  设有n=2kn=2^k个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表:

  • 每个选手必须与其他 n − 1 个选手各比赛一次

  • 每个选手一天只能比赛一次

  • 循环赛一共需要进行 n − 1

  • 请注意比赛日程表的合法性

    一些例子:

  • n=2n=2时的日程表如下表所示

运动员 第一天
1 2
2 1
  • n=4n=4时的日程表如下表所示
运动员 第一天 第二天 第三天
1 2 3 4
2 1 4 3
3 4 1 2
4 3 2 1
  • n=8n=8时的日程表如下表所示
运动员 第一天 第二天 第三天 第四天 第五天 第六天 第七天
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1

  你需要实现 Solution 类中的 round_robin_schedule 方法,对于传入的参数 n,返回一个大小为 n × n 的二维数组。该二维数组满足:

  • 所有元素都在 [1, n] 范围内。
  • 第一列从上到下依次为 1 ∼ n
  • 同行或同列的元素不能相同。

提交

  请在下述代码基础上进行实现,完成函数后提交

#include "Solution.h"
vector<vector<int>> Solution::round_robin_schedule(int n) {
    // 如此构造一个二维数组( nxn 矩阵)
    vector<vector<int> > ans;
    for(int i=0; i<n; i++) {
      ans.push_back(vector<int>(n, 0));
    }
    // 请在这里完成你的代码

    return ans;
  }

  本题不需要输入输出,如果你需要自测,可以直接输出 ans 以验证答案是否正确。

限制

  1k10,n=2k1 \leq k \leq 10, n=2^k