国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-16 10:58:47
字體:
供稿:網(wǎng)友

本文實(shí)例講述了Python3解決棋盤覆蓋問題的方法。分享給大家供大家參考,具體如下:

問題描述:

在2^k*2^k個(gè)方格組成的棋盤中,有一個(gè)方格被占用,用下圖的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<tr+half and pc<tc+half:    chess(tr,tc,pr,pc,half)  else:    table[tr+half-1][tc+half-1]=count    chess(tr,tc,tr+half-1,tc+half-1,half)  if pr<tr+half and pc>=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<tc+half:    chess(tr+half,tc,pr,pc,half)  else:    table[tr+half][tc+half-1]=count    chess(tr+half,tc,tr+half,tc+half-1,half)  if pr>=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=0n=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份,如果特殊格子在這個(gè)小棋盤中則繼續(xù)分成4份,如果不在這個(gè)小棋盤中就把該小棋盤中靠近中央的那個(gè)格子置位,表示L型骨牌的1/3占據(jù)此處,每一次遞歸都會(huì)遍歷查詢4個(gè)小棋盤,三個(gè)不含有特殊格子的棋盤置位的3個(gè)格子正好在大棋盤中央構(gòu)成一個(gè)完整的L型骨牌,依次類推,找到全部覆蓋方法。運(yùn)行結(jié)果如下:

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 衡阳市| 丰城市| 大英县| 乐昌市| 吴堡县| 阿拉尔市| 通化市| 天门市| 睢宁县| 达孜县| 岳阳县| 丹东市| 社旗县| 罗甸县| 新源县| 葫芦岛市| 隆子县| 河东区| 穆棱市| 兰考县| 永兴县| 芮城县| 高淳县| 沁水县| 施甸县| 平南县| 永顺县| 吉木乃县| 开原市| 西乌珠穆沁旗| 辉县市| 和硕县| 会宁县| 清河县| 侯马市| 阿城市| 巴马| 中方县| 西林县| 绩溪县| 台州市|