棋盤覆蓋問題 題解

2021-07-09 09:34:38 字數 2178 閱讀 4733

【問題描述】

在乙個 2^k * 2^k 個方格組成的棋盤中,若恰有乙個方格與其它方格不同,則稱該方格為一特殊方格,稱該棋盤為一特殊棋盤。顯然特殊方格在棋盤上出現的位置有 4^k 種情形。因而對任何 k>=0 ,有 4^k 種不同的特殊棋盤。下圖所示的特殊棋盤為 k=2 時 16 個特殊棋盤中的乙個。

在棋盤覆蓋問題中,要用下圖中 4 中不同形態的 l 型骨牌覆蓋乙個給定的特殊棋牌上除特殊方格以外的所有方格,且任何 2 個 l 型骨牌不得重疊覆蓋。易知,在任何乙個 2^k * 2^k 的棋盤中,用到的 l 型骨牌個數恰為 (4^k-1)/3 。現給出棋盤的大小和特殊方格所在的位置,請找出這種棋盤。

初看時感覺這題目很難,我們可以利用分治的思想,像圖一一樣,將乙個大棋盤不斷分成四個部分,直至每個部分只包含乙個方格,那麼遞迴的邊界就出來了。然後對於每乙個部分,我們需要找到特殊方格,就需要檢視這個特殊方格是否在我們現在找的這個範圍,如果在,就繼續找,不在,就將其對稱的部分用l型牌覆蓋,然後找該編號的l型牌覆蓋的區域。詳見**。

1

vartile,size,k,i,x,y,j:longint;

2 a:array[-1..100,-1..100] of

longint;

3procedure

try(tr,tc,dr,dc,size:longint);

4var

s,t:longint;

5begin

6if size=1

then

7exit;

8 t:=tile;//l型牌的編號

9inc(tile);

10 s:=size div2;

11if (drand(dcthen//查詢是否在左上角,在,繼續找

12try(tr,tc,dr,dc,s)

13else//不在,將右下角用l型牌覆蓋,找該l型牌

14begin

15 a[tr+s-1,tc+s-1]:=t;

16 try(tr,tc,tr+s-1,tc+s-1

,s);

17end;18

if (drand(dc>=tc+s) then//查詢是否在右上角

19 try(tr,tc+s,dr,dc,s)

20else//不在將左下角用l型牌覆蓋

21begin

22 a[tr+s-1,tc+s]:=t;

23 try(tr,tc+s,tr+s-1,tc+s,s);

24end;25

if (dr>=tr+s)and(dcthen//查詢是否在左下角

26 try(tr+s,tc,dr,dc,s)

27else//不在將右上角用l型牌覆蓋

28begin

29 a[tr+s,tc+s-1]:=t;

30 try(tr+s,tc,tr+s,tc+s-1

,s);

31end;32

if (dr>=tr+s)and(dc>=tc+s) then//查詢是否在右下角

33 try(tr+s,tc+s,dr,dc,s)

34else//不在將左上角用l型牌覆蓋

35begin

36 a[tr+s,tc+s]:=t;

37 try(tr+s,tc+s,tr+s,tc+s,s);

38end;39

end;

40begin

41readln(size);

42readln(x,y);

43 tile:=1

;44 try(0,0

,x,y,size);

45for i:=0

to size-1

do46

begin

47for j:=0

to size-1

do48 write(a[i,j]:3,'');

49writeln;

50end;51

end.

棋盤覆蓋問題題解

在乙個2k 2k個方格組成的棋盤中,若恰有乙個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。現用若干個l型骨牌覆蓋在乙個給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋 我們先來看乙個k 2時的棋盤覆蓋問題 那我們怎麼去解決這個問題呢?如果採用分治的思想...

棋盤覆蓋問題

source code include include include using namespace std const int n 1024 int board n n count void cover int sx,int sy,int cx,int cy,int size,int cx1,i...

棋盤覆蓋問題

問題 在乙個2k 2k k 0 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為特殊方格。顯然,特殊方格在棋盤中可能出現的位置有4k種,因而有4k種不同的棋盤,圖4.10 a 所示是k 2時16種棋盤中的乙個。棋盤覆蓋問題 chess cover problem 要求用圖4.10 b 所示...