C 分治法之棋盤覆蓋 迴圈賽日程表

2022-06-24 03:21:11 字數 2497 閱讀 7807

將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。

對於乙個規模為 n 的問題,若問題可以容易地解決,則直接解決,否則將其分解為 k 個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。

1、分解:將原問題分解為若干規模較小、相互獨立、與原問題形式相同的子問題;

2、解決:若子問題規模較小而容易被解決則直接解決,否則,遞迴地解各個子問題;

3、合併:將各子問題的解合併得到原問題的解。

1、棋盤覆蓋

在乙個 2k * 2k 個方格組成的棋盤中,有乙個方格與其它的不同,若使用以下四種 l 型骨牌覆蓋除這個特殊方格的其它方格,如何覆蓋。四個 l 型骨牌如下圖:

圖1.1 l型骨牌

棋盤中的特殊方格如圖:

圖1.2 存在特殊方格的棋盤

覆蓋完成後的棋盤:

圖1.3 覆蓋完成的棋盤

1 #include2

using

namespace

std;34

int tile = 0;5

int board[4][4]; //

棋盤 67/*

8tr:棋盤左上角方格的行號

9tc:棋盤左上角方格的列號

10dr:特殊方格所在的行號

11dc:特殊方格所在的列號

12size:棋盤的規格(size * size)

13*/

14void chessboard(int tr,int tc , int dr, int dc, int

size)

1530

31//

覆蓋右上角子棋盤

32if(dr < tr+s && dc >= tc+s)

33//

特殊方格在此棋盤中

34 chessboard(tr,tc+s,dr,dc,s);

35else

36

4243

//覆蓋左下角子棋盤

44if(dr >= tr+s && dc < tc+s)

45//

特殊方格在此棋盤中

46 chessboard(tr+s,tc,dr,dc,s);

47else

48

5455

//覆蓋右下角子棋盤

56if(dr >= tr+s && dc >= tc+s)

57//

特殊方格在此棋盤中

58 chessboard(tr+s,tc+s,dr,dc,s);

59else

60

6667}68

69int

main()

7079 cout<

81return0;

82 }

2、迴圈賽日程表

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

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

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

(3)迴圈賽在n-1天內結束。

請按此要求將比賽日程表設計成有 n 行和 n-1 列的乙個表。在表中的第 i 行,第 j 列處填入第 i 個選手在第 j 天所遇到的選手。其中 1 ≤ i ≤ n,1 ≤ j ≤ n-1。8 個選手的比賽日程表如下圖:

選手的個數67

/*8tox:目標陣列的行號

9toy:目標陣列的列號

10fromx:源陣列的行號

11fromy:源陣列的列號

12r:陣列的大小為 r*r

13*/

14void copy(int tox, int toy, int fromx, int fromy, int

r)15

2021

void table(int

k)2234}

3536

37int

main()

3851 cout<

52}

53return0;

54 }

分治法 迴圈賽日程表

設有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 位選手在第...

迴圈賽日程表(分治)

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