當
k>0
時,將2k×
2k棋盤分割為4個
2k-1×2
k-1子棋盤
(a)所示。
特殊方格必位於
4個較小子棋盤之一中,其餘
3個子棋盤中無特殊方格。為了將這
3個無特殊方格的子棋盤轉化為特殊棋盤,可以用乙個
l型骨牌覆蓋這
3個較小棋盤的會合處,如
(b)所示,從而將原問題轉化為
4個較小規模的棋盤覆蓋問題。遞迴地使用這種分割,直至棋盤簡化為棋盤1×
1。
#includeusing namespace std;
int tile=1;//骨牌編號
int board[100][100];//棋盤
/*tr棋盤左上角行號
tc棋盤左上角列號
dr當前特殊方格行號
dc當前特殊方格列號
*/void chessboard(int tr,int tc,int dr,int dc,int size)
//特殊方塊是否在左下角棋盤中
if(dr>=tr+s&&dc=tr+s&&dc>=tc+s)
chessboard(tr+s,tc+s,dr,dc,s);
else }
int main()
{ int size;
coutint a,b;
cout>b;
chessboard(0,0,a,b,size);
for(int i=0;i
遞迴 棋盤覆蓋
問題描述 在乙個2 k 2 k 的方格組成的棋盤中,有乙個方格與其他方格不同,稱為特殊方格。現在邀請4中不同的l型骨牌 覆蓋給定的棋盤除特殊方格外的所有方格。例如 這是乙個k 2時的棋盤,特殊點座標為 0,1 四中l型骨牌如圖 程式 include define key 8 棋盤的階數 int ar...
遞迴 PTA棋盤覆蓋
在乙個2 k 2k k為正整數,k 10,length 2k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格 其座標為aa,bb,分別代表行座標號和列座標號 以及有四種l型骨牌 如下圖 求用若干塊這種l型骨牌實現除該特殊點棋盤的全覆蓋。本題要求採用分治演算法做 輸入格式 輸入三...
演算法 遞迴 棋盤覆蓋問題
1 最小情況 2 原問題與子問題同型 3 原問題的解可以用子問題的解來構造 在乙個2的k次方 x 2的k次方 此處數學公式的插入待修改 個方格的棋盤中,恰有乙個方格與其他方格不同,則稱該方格為特殊方格,在棋盤覆蓋問題中,要用l型骨牌 覆蓋乙個帶有乙個特殊方格的棋盤,特殊方塊上不能覆蓋骨牌,其他方塊上...