殘缺棋盤問題
對於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,用乙個空格隔開,表示了將...