棋盤覆蓋問題 分治法

2022-04-13 19:06:18 字數 1360 閱讀 8712

棋盤覆蓋問題

問題描述:

在乙個2^k×2^k個方格組成的棋盤中,若有乙個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為乙個特殊棋盤.顯然特殊方格在棋盤上出現的位置有4^k種情形.因而對任何

k≥0,有4^k種不同的特殊棋盤.

下圖–圖(1)中的特殊棋盤是當k=3時16個特殊棋盤中的乙個:

題目要求在棋盤覆蓋問題中,要用下圖-圖(2)所示的4種不同形態的l型骨牌覆蓋乙個給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋.

圖(2)

題目包含多組測試資料,輸入包含測試資料組數n,下面輸入n組資料,每組資料,包括邊長m和特殊方格的位置x,y。

input sample22

0 08

2 2output sample

case:1

0  1 

1  1 

case:2

3  3  4  4  8  8  9  9 

3  2  2  4  8  7  7  9 

5  2  0  6  10 10 7  11

5  5  6  6  1  10 11 11

13 13 14 1  1  18 19 19

13 12 14 14 18 18 17 19

15 12 12 16 20 17 17 21

15 15 16 16 20 20 21 21

**如下:

#include#include#include#define n 10000

int board[n][n];//棋盤的布局

int team;//用方塊覆蓋,相當於分組

int loc;//key(x,y)的方位(返回值為1、2、3、4分別指1、2、3、4象限)

int witk(int m,int x,int y,int a,int b)

void cover(int m,int a,int b){

int i;

int j;

int x,y;

int n;

if(m==2){//若m==2,直接覆蓋

for(i=a;i2

for(i=a;i

分治法 棋盤覆蓋問題

棋盤覆蓋問題。有乙個2k 2k 的方格棋盤,恰有乙個方格是黑色的,其他為白色。你的任務是用包含3個方格的l型牌覆蓋所有白色方格。黑色方格不能被覆蓋,且任意乙個白色方格不能同時被兩個或更多牌覆蓋。如圖所示為l型牌的4種旋轉方式。分治三步驟 劃分問題 將 2 k 2k 的棋盤劃分為 2 k 1 2k 1...

分治法 棋盤覆蓋問題

在2k 2k的棋盤中有乙個特殊方格,特殊方格的位置共有4k種情況。下圖是22 22棋盤的一種情況 棋盤覆蓋問題要求用下圖中四種不同形態的l型骨牌覆蓋這乙個棋盤,並且l型骨牌之間不能重疊。每個l型骨牌佔三個格,拋去特殊方格,棋盤一共還剩4k 1個格,因此需要的方格數為 4k 1 3個。上例的棋盤經填充...

棋盤覆蓋問題(分治法)

有乙個2k 2k k 0 的棋盤,恰好有乙個方格與其他方格不同,稱之為特殊方格,並且稱該棋盤為一特殊棋盤。現在要用4種不同形狀的三格骨牌覆蓋除了特殊方格外的其他全部方格,並且任何兩個三格骨牌不能重疊。請給出一種覆蓋方案 特殊棋盤 k 3時 四種形狀的三格骨牌 使用二分法對整個棋盤進行劃分 分為四個象...