殘缺棋盤問題

2021-07-27 06:16:28 字數 1064 閱讀 1107



殘缺棋盤問題

對於1*1 2*2 4*4 8*8等 2^k*2^k的棋盤來說,都存在乙個任意的位置,而在棋盤剩餘位置都可以用乙個或多個由三個格仔組成的l型直角版覆蓋

那麼如何覆蓋呢?

在這裡 採用分而治之的方法來考慮。

對於已知的殘缺位置,一定處於當前棋盤的某個象限,那麼在剩下的三個象限中在連線的地方各取乙個方塊為殘缺,這三個方塊的位置剛好可以構成

乙個l型直角,而對於每個象限而言又是規定了乙個殘缺位置,這樣與初始狀態又一致了。也就是說,將乙個完整的棋盤不斷地化為四份,並

且補充每個象限中的殘缺位置,直到不能再劃分。利用遞迴來實現。

**如下:

#include#include#include#include using namespace std;

//遞迴實現殘缺棋盤

int tag = 0;

void function(int tr, int tc, int dr, int dc, int size,int **target);// (tr,tc)表示該棋盤的最左上角的方格的座標。 (dr,dc)表示殘缺方格的位置座標 size表示棋盤的行列數 target是用來

//存放l型直角編碼的。 位置從(0,0)開始計算

int main()

function(0, 0, 3, 3, size, target);

//輸出這個陣列

for (int i = 0; i < size; i++)

//討論缺陷在右上角的情況 與第一種情況相似 模仿著來寫

//void function(int tr, int tc, int dr, int dc, int size,int **target)

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

//缺陷在左下角的情況

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

//缺陷在右下角的時候

else

}

殘缺棋盤問題

殘缺棋盤問題 殘缺棋盤是乙個2 k 2 k個方格的棋盤,其中恰好有乙個方格殘缺,現在要求用三格板覆蓋棋盤,在此覆蓋中兩塊三格板不能重疊,三格板也不能覆蓋在殘缺的方格上。include include include using namespace std const int n 104 int bo...

A 棋盤問題

在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將在乙個n n...

A 棋盤問題

在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將...