棋盤覆蓋問題 遞迴與分治 java實現

2021-08-19 06:30:46 字數 890 閱讀 6446

棋盤覆蓋問題

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...