分治法 棋盤覆蓋問題

2021-10-02 07:07:54 字數 2804 閱讀 9203

在2k×2k的棋盤中有乙個特殊方格,特殊方格的位置共有4k種情況。

下圖是22×22棋盤的一種情況:

棋盤覆蓋問題要求用下圖中四種不同形態的l型骨牌覆蓋這乙個棋盤,並且l型骨牌之間不能重疊。

每個l型骨牌佔三個格,拋去特殊方格,棋盤一共還剩4k-1個格,因此需要的方格數為(4k-1)/3個。

上例的棋盤經填充後變成下圖:

使用分治策略,可以設計出乙個簡潔的演算法:

將2k×2k的棋盤劃分為2k-1×2k-1的四個小棋盤。特殊位置必落在其中乙個棋盤中。將剩餘三個棋盤靠中心的點記為新的特殊點,三個新的特殊點會構成乙個l型骨牌。如下圖所示:

然後再對2k-1的棋盤再次使用這個演算法,只到棋盤只剩乙個位置。

**如下:

number =

0def

chess

(board, top, bottom, left, right, x, y)

:if bottom <= top or right <= left:

return

x_mid = top +

(bottom - top)//2

y_mid = left +

(right - left)//2

global number

number +=

1type

= number

# 左上角

if x <= x_mid and y <= y_mid:

chess(board, top, x_mid, left, y_mid, x, y)

else

: board[x_mid]

[y_mid]

=type

chess(board, top, x_mid, left, y_mid, x_mid, y_mid)

# 右上角

if x <= x_mid and y > y_mid:

chess(board, top, x_mid, y_mid +

1, right, x, y)

else

: board[x_mid]

[y_mid +1]

=type

chess(board, top, x_mid, y_mid +

1, right, x_mid, y_mid +1)

# 左下角

if x > x_mid and y <= y_mid:

chess(board, x_mid +

1, bottom, left, y_mid, x, y)

else

: board[x_mid +1]

[y_mid]

=type

chess(board, x_mid +

1, bottom, left, y_mid, x_mid +

1, y_mid)

# 右下角

if x > x_mid and y > y_mid:

chess(board, x_mid +

1, bottom, y_mid +

1, right, x, y)

else

: board[x_mid +1]

[y_mid +1]

=type

chess(board, x_mid +

1, bottom, y_mid +

1, right, x_mid +

1, y_mid +1)

chessboard =[[

0,-1

,0,0

,0,0

,0,0

],[0

,0,0

,0,0

,0,0

,0],

[0,0

,0,0

,0,0

,0,0

],[0

,0,0

,0,0

,0,0

,0],

[0,0

,0,0

,0,0

,0,0

],[0

,0,0

,0,0

,0,0

,0],

[0,0

,0,0

,0,0

,0,0

],[0

,0,0

,0,0

,0,0

,0],

]chess(chessboard,0,

7,0,

7,0,

1)for i in

range(0

,8):

for j in

range(0

,8):

print

(chessboard[i]

[j], end=

'\t'

)print

()

執行結果如下:

分治法 棋盤覆蓋問題

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

棋盤覆蓋問題(分治法)

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

棋盤覆蓋問題 分治法

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