迴圈賽日程表(分治)

2021-10-20 01:23:46 字數 882 閱讀 5668

設有 n = 2的k次方 個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表:

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

(2)每個選手一天只能賽一次。

(3)迴圈賽一共進行n-1天。

按分治策略,我們可以將所有的選手分為兩半,n個選手的比賽日程表可以通過n/2個選手設計的比賽日程表來決定。

遞迴地用這種一分為二的策略對選手進行分割,直到只剩下兩個選手時,比賽日程表的制定就變得很簡單。

這時只要讓這兩個選手進行比賽就可以了。

}//m=1時 // 2 1 4 3 (t - 1)*m * 2便能到4的位置

output

(k);

} m *=2

;//行列的多少

}output

(k);

return0;

}void

output

(int k)

}int

main()

分治法 迴圈賽日程表

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

迴圈賽日程表 分治法

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

迴圈賽日程表

對於書上那個日程表的實現,第三版的課本給出了迴圈實現的方法,不過這個表的生成明顯要用遞迴方法生成更為合適,此表如下 可以看到每次該錶的生成總可以分成四個字表的填充過程,初始化讓左邊第一列填充上之後,然後每一次先遞迴填充左上角的子表,然後再填充左下角的子表,然後右上和右下的子表用copy的方法填充,實...