分治演算法 選手日程表設計

2021-10-03 12:41:28 字數 852 閱讀 6203

有n(n=2k)個運動員要進行網球迴圈賽,alice和bob要為他們設計乙個滿足以下要求的比賽日程表:

每個選手必須與其他n-1個選手各賽一次

每個選手一天只能賽一次

迴圈賽一共進行n-1天

輸入為k

請為他們設計演算法。

樣例輸入:

1樣例輸出

1 22 1

演算法描述:

先初始化乙個兩個選手的比賽日程表;

若輸入選手數為2,則直接輸入初始化的比賽日程表

若輸入選手數大於2,則先將2人比賽日程表中每一項加2得到的新錶值填充到其下方,其則是3、4號選手第1、2天的比賽日程;

將3、4號選手第1、2天的比賽日程填充到1、2號選手第3、4天的比賽日程上;

將1、2號選手第1、2天的比賽日程填充到3、4號選手第3、4天的比賽日程上;

使用迴圈,比賽日程表可以重複進行類似上面操作,使得得到8位、16位、32位選手…的比賽日程表。

注:主要思路是根據初始的2位選手的比賽日程,翻一倍完成4位選手的比賽日程,再翻已被完成8位選手比賽日程…其中每一步的做法也都相同,這也就是可以使用到分治演算法,逐步算出每一步的日賽日程表,得到最終結果。

**如下

#include

#include

using

namespace std;

int k;

int cal[

200]

[200];

intmain()

for(

int i =

1; i <= n; i++

)}

基礎分治演算法題 迴圈比賽日程表

時間限制 1 sec 記憶體限制 128 mb 提交 1 解決 1 提交 狀態 討論版 設有n個選手進行迴圈比賽,其中n 2m,要求每名選手要與其他n 1名選手都賽一次,每名選手每天比賽一次,迴圈賽共進行n 1天,要求每天沒有選手輪空。m 1 m 6 形式的比賽安排表,每個數占3列。31 2 3 4...

迴圈賽日程表(分治)

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

迴圈日程表問題(分治遞迴)

參考部落格 迴圈日程表問題。n 2k 個運動員進行網球迴圈賽,需要設計比賽日程表。每個選手必須與其他n 1 個選手各賽一次 每個選手一天只能賽一次 迴圈賽一共進行n 1 天。按此要求設計一張比賽日程表,該錶有n 行和n 1 列,第i 行j列為第i 個選手第j 天遇到的選手。該問題和棋盤問題很像,都可...