分治演算法 L型骨牌棋盤覆蓋

2021-06-27 07:45:46 字數 878 閱讀 6817

l型骨牌棋盤覆蓋

題目描述

有乙個棋盤,要求用給定的四種骨牌進行覆蓋。四種骨牌定義如下:

給定的棋盤中有乙個格仔不存在,即不需要覆蓋的格仔。

輸入輸入有多個用例,第乙個為用例個數n,接下來每個用例佔兩行,其中第一行為棋盤大小(如3,表示棋盤大小為2的3次,即8行8列),第二行為兩個正整數,表示空缺的格仔行號和列號。

輸出每個用例用一行輸出各種骨牌的使用數,用乙個空格隔開。

樣例輸入13

1 1樣例輸出

9 5 5 2

如圖:

1、先判斷缺的瓷磚在整個棋盤的那個位置(左上,右上,左下,右下),缺的瓷磚在1號。

2、在中間放乙個對應1號瓷磚。

3、在將再將左上的部分分解,重複直到只有乙個瓷磚。

accode:

#include #include using namespace std;

int k1,k2,k3,k4;

void work(int rs,int re,int cs,int ce, int u,int w)

else //處於右部分

}else //下面

else

}}int main()

{ int t,n,u,w;

cin>>t;

while(t--)

{ k1=k2=k3=k4=0;

cin>>n>>u>>w;//u,w表示缺的位置

n = (int)pow(2,n);

work(1,n,1,n,u,w);

cout<

分治演算法 棋盤覆蓋

問題描述 在乙個2 k 2 k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。解題思路 分析 當k 0時,將2k 2k棋盤分...

棋盤覆蓋問題 分治演算法

演算法日誌記錄pta 在乙個2 k 2 k k為正整數,k 10,length 2 k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格 其座標為aa,bb,分別代表行座標號和列座標號 以及有四種l型骨牌 如下圖 求用若干塊這種l型骨牌實現除該特殊點棋盤的全覆蓋。本題要求採用分治...

分治 棋盤覆蓋

題目描述 在乙個2 k 2 k個方格組成的棋盤中,若恰有乙個方格與其它方格不同,則稱該方格為一特殊方格,稱改棋盤為一特殊棋盤。顯然特殊方格在棋盤上出現的位置有4 k種情形。因而對任何k 0,有4 k種不同的特殊棋盤。下圖所示的特殊棋盤為k 2時16個特殊棋盤中的乙個。在棋盤覆蓋問題中,要用下圖中4中...