【问题描述】设有2n(n≤6)个球队进行单循环比赛,计划在2n-1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2n-1天内每个队都与不同的对手比赛。例如 n=2时的比赛安排为:
【分析】此题很难直接给出结果,我们先将问题进行分解。 设 m=2n,并将规模减半。假如 n=3(即 m=8),8个球队的比赛,减半后变成4个球队的比赛(m=4)。 4个球队的比赛的安排方式还不是很明显,再减半到两个球队的比赛(m=2)。两个球队的比赛安排方式很简单,只要让两个球队直接进行一场比赛即可:1-2
分析两个球队的比赛的情况不难发现,表格主体是一个对称的方阵,我们把这个方阵分成4部分(即左上、右上、左下、右下),右上部分可由左上部分加1(即加 m/2)得到,而左上与右下部分、右上与左下部分分别相等。因此我们也可以把这个方阵看作是由 m=1的方阵所生成的。同理,可得 m=4的方阵:
同理可由 m=4方阵生成 m=8的方阵: 这样就构成了整个比赛的安排表。在算法设计中,用数组 a 记录2n 个球队的循环比赛表,整个循环比赛表从最初的1×1方阵按上述规则生成2×2的方阵,再生成4×4的方阵……直到生成出整个循环比赛表为止。
|