棋盤覆蓋問題python3實現

2021-09-07 11:37:57 字數 1326 閱讀 5985

在2^k*2^k個方格組成的棋盤中,有乙個方格被占用,用下圖的4種l型骨牌覆蓋全部棋盤上的其餘全部方格,不能重疊。

**例如以下:

def chess(tr,tc,pr,pc,size):

global mark

global table

mark+=1

count=mark

if size==1:

return

half=size//2

if pr=tc+half:

chess(tr,tc+half,pr,pc,half)

else:

table[tr+half-1][tc+half]=count

chess(tr,tc+half,tr+half-1,tc+half,half)

if pr>=tr+half and pc=tr+half and pc>=tc+half:

chess(tr+half,tc+half,pr,pc,half)

else:

table[tr+half][tc+half]=count

chess(tr+half,tc+half,tr+half,tc+half,half)

def show(table):

n=len(table)

for i in range(n):

for j in range(n):

print(table[i][j],end=' ')

print('')

mark=0

n=8table=[[-1 for x in range(n)] for y in range(n)]

chess(0,0,2,2,n)

show(table)

n是棋盤寬度。必須是2^k,本例中n=8,特殊格仔在(2,2)位置,例如以下圖所看到的:

採用分治法每次把棋盤分成4份,假設特殊格仔在這個小棋盤中則繼續分成4份,假設不在這個小棋盤中就把該小棋盤中靠近**的那個格仔置位。表示l型骨牌的1/3占領此處。每一次遞迴都會遍歷查詢4個小棋盤,三個不含有特殊格仔的棋盤置位的3個格仔正好在大棋盤**構成乙個完整的l型骨牌,依次類推,找到所有覆蓋方法。

執行結果例如以下:

棋盤覆蓋問題python3實現

在2 k 2 k個方格組成的棋盤中,有乙個方格被占用,用下圖的4種l型骨牌覆蓋所有棋盤上的其餘所有方格,不能重疊。如下 def chess tr,tc,pr,pc,size global mark global table mark 1 count mark if size 1 return hal...

棋盤覆蓋問題(python實現)

在乙個 個方格組成的棋盤中,有乙個方格與其它的不同,使用四種l型骨牌覆蓋除這個特殊方格的其它方格,請使用分治法實現棋盤覆蓋 1 分析 由於原棋盤只有乙個特殊方格,我們首先將棋盤規格從 減少一半分割為4個 子棋盤 a 所示,這4個子棋盤中只有乙個子棋盤包含該特殊方格,其餘3個子棋盤中沒有特殊方格。為了...

Python3解決棋盤覆蓋問題的方法示例

問題描述 在2 k 2 k個方格組成的棋盤中,有乙個方格被占用,用下圖的4種l型骨牌覆蓋所有棋盤上的其餘所有方格,不能重疊。如下 def chess tr,tc,pr,pc,size global mark global table mark 1 count mark if size 1 retur...