棋盤覆蓋 分治和遞迴

2021-09-08 21:49:47 字數 2689 閱讀 9030

棋盤覆蓋問題

time limit:1000ms,special time limit:2500ms,memory limit:32768kb

total submit users:62,accepted users:26

problem 10432 :no special judgement

problem description

在乙個2k x 2k ( 即:2^k x 2^k )個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。

input

輸入檔案第一行是乙個整數t,表示有多少組測試資料,接下來是t組測試資料,共2t行,每組第一行為整數n,是2的n次冪(1<=n<=64),表示棋盤的大小為n*n,第二行是兩個整數,代表特殊方格所在行號和列號。

output

先輸出「case:i,然後按樣例輸出。資料間用製表符隔開(『t』),每行最後乙個資料後無製表符。

sample input

2

20 0

82 2

sample output

case:1

0       1

1       1

case:2

3       3       4       4       8       8       9       9

3       2       2       4       8       7       7       9

5       2       0       6       10      10      7       11

5       5       6       6       1       10      11      11

13      13      14      1       1       18      19      19

13      12      14      14      18      18      17      19

15      12      12      16      20      17      17      21

15      15      16      16      20      20      21      21

judge tips

要求遍歷順序按從左到右,從上到下。

1

/*功能function description: 棋盤覆蓋

2開發環境environment: dev c++ 4.9.9.1

3技術特點technique:

4版本version:

5作者author: 可笑痴狂

6日期date: 20120820

7備註notes:

8&id=10432&type=show

9題解:

10分治和遞迴

11詳解:

12*/

1314

//不知道為啥不能提交,感覺沒啥問題

15 #include16

int board[65][65

];17

intnum;

18//

r1,c1:棋盤左上角的行號和列號

19//

rs,cs:特殊方格的行號和列號

20//

size=棋盤的邊長

21void putchess(int rl,int cl,int rs,int cs,int

size)

2234

if(rs=half+cl) //

特殊方格在右上角的棋盤中

35 putchess(rl,cl+half,rs,cs,half);

36else

//不在此棋盤,將此棋盤左下角設為相應的骨牌號

3741

if(rs>=half+rl&&cs//

特殊方格在左下角的棋盤中

42 putchess(rl+half,cl,rs,cs,half);

43else

//不在此棋盤,將此棋盤右上角設為相應的骨牌號

4448

if(rs>=half+rl&&cs>=half+cl) //

特殊方格在右下角的棋盤中

49 putchess(rl+half,cl+half,rs,cs,half);

50else

//不在此棋盤,將此棋盤左上角設為相應的骨牌號

5155}56

5758

59int

main()

6077}78

return0;

79 }

棋盤覆蓋問題(分治,遞迴)

在乙個2 k 2 k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。該棋盤為特殊棋盤,紅色的方格為特殊方格。棋盤覆蓋問題是指,要用圖2中的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。該問題就是在考察...

分治與遞迴之棋盤覆蓋

棋盤覆蓋問題要求在2 k 2 k 個方格組成的棋盤中,給定任意乙個特殊點,實現對除該特殊點的棋盤實現全覆蓋。如圖所示 如下 include include using namespace std int title 1 設定l型骨牌編號 int board 2049 2049 void chessb...

棋盤覆蓋問題(遞迴與分治)

棋盤覆蓋問題。有乙個2k 2k2k 2k的方格棋盤,恰有乙個方格是黑色的,其他為白色。你的任務是用包含3個方格的l型牌覆蓋所有白色方格。黑色方格不能被覆蓋,且任意乙個白色方格不能同時被兩個或更多牌覆蓋。如圖所示為l型牌的4種旋轉方式。當乙個黑塊位於某一角時,可以解決乙個邊長為2的正方形匹配。可是這樣...