迴圈賽日程表 分治法

2021-09-28 16:50:58 字數 1157 閱讀 2801

設有n=2^k個運動員,要進行網球迴圈賽。現在要設計乙個滿足以下要求的比賽日程表,每個選手必須與其他n-1個選手各賽一場,每個選手一天只能賽一次,迴圈賽一共進行n-1天,將比賽日程表設計成n行n列,表中除了第一列,其他n-1列才是我們要的,陣列下標行列都從0開始,第i行j列代表第(i+1)位選手在第j天的對手:

題解:首先我們找到規律,此圖左上角與右下角相同,右上角與左下角相同,我們可以先求出上半部分,才複製到下半部分區域,得出所求**。

首先,初始化第一行

從1-2開始入手,直接引用上面規律

擴充求出5-8

求出全部

**如下所示

```cpp

#include

#include

#define n 50

int a[n]

[n];

void

table

(int k)

;void

print

(int k)

;//輸出二維陣列

main()

void

table

(int k)

//陣列下標從1開始

m*=2

;}}void

print

(int k)

printf

("\n");

}}

分治法 迴圈賽日程表

設有n 2k個運動員要進行羽毛球迴圈賽,現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其它n 1個選手各賽一次 2 每個選手一天只能比賽一次 3 迴圈賽一共需要進行n 1天。由於n 2 k,顯然n為偶數。按分治策略,將所有的選手分為兩半,n個選手的比賽日程表就可以通過為n 2個選手設計的比...

迴圈賽日程表(分治)

設有 n 2的k次方 個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各自賽一次。2 每個選手一天只能賽一次。3 迴圈賽一共進行n 1天。按分治策略,我們可以將所有的選手分為兩半,n個選手的比賽日程表可以通過n 2個選手設計的比賽日程表來決定。遞迴地...

分治法 迴圈賽日程表問題

迴圈賽日程表問題問題描述 設有n n 2 k 位選手參加網球迴圈賽,迴圈賽共進行n 1天,每位選手要與其他n 1位選手比賽一場,且每位選手每天必須比賽一場,不能輪空。試按此要求為比賽安排日程 1 每個選手必須與其他n 1個選手各賽一場 2 每個選手一天只能賽一場 3 迴圈賽一共進行n 1天。思路和 ...