棋盤覆蓋問題

2022-09-04 02:48:11 字數 1100 閱讀 1540

1. 題目:參見《計算機演算法設計與分析》p19

2. 分析:當k>0時,將2k×2k的棋盤分成4個2k-1×2k-1的子棋盤。特殊方格必位於4個較小子棋盤之一中,其餘3個子棋盤無特殊方格。為了將這3個無特殊方格的子棋盤轉化為特殊棋盤,我們可以用乙個l型骨牌覆蓋這3個較小棋盤的匯合處,這3個子棋盤上被l型骨牌覆蓋的方格就成為該棋盤上的特殊方格,從而將問題轉化為4個較小規模的棋盤覆蓋問題。遞迴地使用這種分割,知道棋盤轉化為1×1的棋盤。

3. **:

1 #include 2 #include 3 #include 

4 #include 5

using

namespace

std;67

#define n 10089

intboard[n][n];

10int

t;11

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

size)

1330

31//

特殊方格在右上角

32if(dr=tc+s)

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

34else

3539

40//

特殊方格在左下角

41if(dr>=tr+s&&dcs)

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

43else

4448

49//

特殊方格在右下角

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

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

52else

5357}58

59//

輸出board中的值

60void print(int

n)6169}

7071

void

main()

72

4. 執行結果:

棋盤覆蓋問題

source code include include include using namespace std const int n 1024 int board n n count void cover int sx,int sy,int cx,int cy,int size,int cx1,i...

棋盤覆蓋問題

問題 在乙個2k 2k k 0 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為特殊方格。顯然,特殊方格在棋盤中可能出現的位置有4k種,因而有4k種不同的棋盤,圖4.10 a 所示是k 2時16種棋盤中的乙個。棋盤覆蓋問題 chess cover problem 要求用圖4.10 b 所示...

棋盤覆蓋問題

棋盤覆蓋問題 time limit 1000ms,special time limit 2500ms,memory limit 32768kb total submit users 103,accepted users 40 problem 10432 no special judgement pr...