在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個特殊棋盤中的乙個 題目...