棋盤覆蓋問題
1、問題描述
在乙個2k x 2k ( 即:2^k x 2^k )個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。
2、解決思路
這道題可以用遞迴與分治的思想來解決,也就是把乙個大的棋盤分成4個小棋盤,檢索填充,然後在把小棋盤繼續細分,直到棋盤中只包含乙個格仔為止。
3、核心**
/**
* 棋盤覆蓋函式
* @param tr:表示當前所在棋盤的左上角的行位置
* @param tc:表示當前所在棋盤的左上角的列位置
* @param dr:表示特殊棋盤的行位置
* @param dc:表示特殊體盤的列位置
* @param size:棋盤的長度
*/public static void chessboard(int tr,int tc,int dr,int dc,int
size)
int curpattern = ++count;
//將棋盤從中間分為4部分
size = size>>1;
//左上部分
if(drsize && dcsize) else
//右上部分
if(drsize && dc>=tc+size) else
//左下部分
if(dr>=tr+size && dcsize) else
//右下部分
if(dr>=tr+size && dc>=tc+size) else
}
棋盤覆蓋問題(遞迴與分治)
棋盤覆蓋問題。有乙個2k 2k2k 2k的方格棋盤,恰有乙個方格是黑色的,其他為白色。你的任務是用包含3個方格的l型牌覆蓋所有白色方格。黑色方格不能被覆蓋,且任意乙個白色方格不能同時被兩個或更多牌覆蓋。如圖所示為l型牌的4種旋轉方式。當乙個黑塊位於某一角時,可以解決乙個邊長為2的正方形匹配。可是這樣...
棋盤覆蓋問題(分治,遞迴)
在乙個2 k 2 k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。該棋盤為特殊棋盤,紅色的方格為特殊方格。棋盤覆蓋問題是指,要用圖2中的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。該問題就是在考察...
遞迴與分治之棋盤覆蓋問題
在乙個2 k 2 k個方格組成的棋盤中,若有乙個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為乙個特殊棋盤。顯然特殊方格在棋盤上出現的位置有4 k種情形.因而對任何k 0,有4 k種不同的特殊棋盤。下圖所示的特殊棋盤為 k 2 時 16 個特殊棋盤中的乙個。在棋盤覆蓋問題中,要用下圖中 4...