🏆循环赛日程安排问题

📓问题描述

现有n=2^k位选手参加比赛,规则如下:

  • 每名选手每天最多只能比赛一场
  • 每名选手都要和其他所有选手赛一场

请安排比赛日程。

进阶:如果n >= 2是任意正整数,如何安排?

🙆解题

首先,这并不是最优解问题。只要求出一种解法即可。
分析:

  • 每个选手都要和其他选手比一场,所以至少要比赛n-1天。

    n=2^k的解法

    分治-递归算法中一个链节的设计:(数学归纳法,子问题)

  • 选手共n人,将选手分为2队

  • 假设每一队内的各个选手都已经互相比赛过,如何设计之后的比赛,能够让这n人之间都互相比赛一场?

循环赛日程安排问题 - 图1``` // 递归的接口 void RoundRobinSchedule (vector group1, vector group2) { … // 输出组间的比赛即可 }

```

n>=2的任意整数的解法

使用双向循环链表 循环赛日程安排问题 - 图2