棋盤覆蓋問題
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
2sample output20 0
82 2
case:1judge tips0 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
要求遍歷順序按從左到右,從上到下。
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的正方形匹配。可是這樣...