description
在乙個2k x 2k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。
input
k,dr,dc。k定義如前,dr,dc分別表示特殊方格所在的行號和列號 1= < k < =6
output
按照左上,右上,左下,右下的順序用分治法求解。特殊方格標0,其他位置按上述順序依次標記。
sample input
2 1 1
sample output
2 2 3 3
2 0 1 3
4 1 1 5
4 4 5 5
分析:
在乙個棋盤上存在乙個特殊方格,將其四等分(長寬各減半),然後在不存在特殊方格的其餘三個方格構建「偽」特殊方格,依次遞迴。
#include
#include
#include
#include
using namespace std;
int tile =1;
int board[80]
[80];
void
chessboard
(int tr,
int tc,
int dr,
int dc,
int size)
if(dr=tc+s)
chessboard
(tr,tc+s,dr,dc,s)
;else
if(dr>=tr+s&&dcchessboard
(tr+s,tc,dr,dc,s)
;else
if(dr>=tr+s&&dc>=tc+s)
chessboard
(tr+s,tc+s,dr,dc,s)
;else
}int
main()
cout<}return0;
}
4 棋盤覆蓋
1 問題 在乙個2 k 2 k個方格組成的棋盤中,若有乙個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為乙個特殊棋盤.顯然特殊方格在棋盤上出現的位置有4 k種情形.因而對任何k 0,有4 k種不同的特殊棋盤.當k 3時,一共有64種特殊棋盤,圖1為其中的一種.用下圖2所示的4種不同形態的l...
棋盤覆蓋演算法
在乙個2k 2k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤,顯然特殊方格在棋盤上出現的位置有4k種情形。因而對任何k 0,有4k種不同的特殊棋盤。特殊方格必位於4個較小子棋盤之一中,其餘3個子棋盤中無特殊方格。為了將這3個無特殊方格的子棋盤轉化為特殊...
分治演算法 棋盤覆蓋
問題描述 在乙個2 k 2 k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。解題思路 分析 當k 0時,將2k 2k棋盤分...