亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python自帶tkinter庫實現棋盤覆蓋圖形界面

 更新時間:2019年07月17日 16:48:41   作者:kevinoop  
這篇文章主要為大家詳細介紹了python自帶tkinter庫實現棋盤覆蓋圖形界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下

python實現棋盤覆蓋圖形界面,供大家參考,具體內容如下

一、解決方案和關鍵代碼

工具: python tkinter庫

問題描述:

  在一個2^k×2^k個方格組成的棋盤中,若有一個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為一個特殊棋盤.顯然特殊方格在棋盤上出現的位置有4^k種情形.因而對任何k≥0,有4^k種不同的特殊棋盤。
  在棋盤覆蓋問題中,要用下圖中 4 中不同形態(tài)的 L 型骨牌覆蓋一個給定的特殊棋牌上除特殊方格以外的所有方格,且任何 2 個 L 型骨牌不得重疊覆蓋。易知,在任何一個 2^k × 2^k 的棋盤中,用到的 L 型骨牌個數恰為 (4^k-1)/3 。


解決方法:遞歸與分治法

  用分治策略,可以設計解棋盤問題的一個簡捷的算法。
  當 k>0 時,將 2^k * 2^k 棋盤分割為 4 個 2^(k-1) * 2^(k-1) 子棋盤;
  特殊方格必位于 4 個較小子棋盤之一中,其余 3 個子棋盤中無特殊方格。為了將這 3 個無特殊方格的子棋盤轉化為特殊棋盤,我們可以用一個 L 型骨牌覆蓋這 3 個較小的棋盤的匯合處,如下圖所示,這 3 個子棋盤上被 L 型骨牌覆蓋的方格就成為該棋盤上的特殊方格,從而將原問題化為 4 個較小規(guī)模的棋盤覆蓋問題。遞歸的使用這種分割,直至棋盤簡化為 1x1 棋盤。

算法關鍵代碼

def chessBoard(tr,tc,dr,dc,size):
 global tile
 global board
 if (size==1):
  return 0
 tile+=1
 t=tile
 s=size//2
 #the upper left corner
 if (dr<tr+s and dc<tc+s):
  chessBoard(tr,tc,dr,dc,s)
 else:
  board[tr+s-1,tc+s-1]=t
  chessBoard(tr,tc,tr+s-1,tc+s-1,s)
 #the upper right corner
 if (dr<tr+s and dc>=tc+s):
  chessBoard(tr,tc+s,dr,dc,s)
 else:
  board[tr+s-1,tc+s]=t
  chessBoard(tr,tc+s,tr+s-1,tc+s,s)
 #the lower left corner
 if (dr>=tr+s and dc<tc+s):
  chessBoard(tr+s,tc,dr,dc,s)
 else:
  board[tr+s,tc+s-1]=t
  chessBoard(tr+s,tc,tr+s,tc+s-1,s)
 #the lower right corner
 if (dr>=tr+s and dc>=tc+s):
  chessBoard(tr+s,tc+s,dr,dc,s)
 else:
  board[tr+s,tc+s]=t
  chessBoard(tr+s,tc+s,tr+s,tc+s,s)

畫棋盤關鍵代碼:

def drawboard(canvas1,board,colors,startx=50,starty=50,cellwidth=50):
 width=2*startx+len(board)*cellwidth
 height=2*starty+len(board)*cellwidth
 canvas1.config(width=width,height=height)#布置畫布
 for i in range(len(board)):
  for j in range(len(board)):
   index=board[i][j]
   if index== 0:    
    color='white'#特殊方格顯示為白色
   else:
    color=colors[6*index]#為了間隔開顏色
   cellx=startx+i*50
  celly=starty+j*50  
  canvas1.create_rectangle(cellx,celly,cellx+cellwidth,celly+cellwidth,fill=color,outline="black")#畫方格
 canvas1.update()

二、數據測試

特殊方格坐標為(1,1),棋盤大小為(2^2*2^2)


特殊方格坐標為(2,2),棋盤大小為(2^3*2^3)

 

完整代碼下載鏈接點這里

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • pytorch中.to(device) 和.cuda()的區(qū)別說明

    pytorch中.to(device) 和.cuda()的區(qū)別說明

    這篇文章主要介紹了pytorch中.to(device) 和.cuda()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python的sys.path模塊路徑添加方式

    python的sys.path模塊路徑添加方式

    這篇文章主要介紹了python的sys.path模塊路徑添加方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • PYTHON實現SIGN簽名的過程解析

    PYTHON實現SIGN簽名的過程解析

    這篇文章主要介紹了PYTHON實現SIGN簽名的過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Python學習之異常斷言詳解

    Python學習之異常斷言詳解

    這篇文章主要和大家介紹一下異常的最后一個知識點——斷言 ,斷言是判斷一個表達式,在表達式為 False 的時候觸發(fā)異常。本文將通過示例詳細介紹一下斷言,需要的可以參考一下
    2022-03-03
  • 使用python實現快速搭建簡易的FTP服務器

    使用python實現快速搭建簡易的FTP服務器

    本文給大家推薦的是如何使用Python實現快速搭建簡易的FTP服務器的方法,非常的簡單,有需要的小伙伴可以參考下
    2018-09-09
  • 淺析Python四種數據類型

    淺析Python四種數據類型

    在這篇文章里,我們給大家分享了關于Python的四種數據類型相關知識點內容,有興趣的朋友們參考下。
    2018-09-09
  • 分享Python?的24個編程超好用技巧

    分享Python?的24個編程超好用技巧

    這篇文章主要給大家分享Python?的24個編程超好用技巧,下面分享一些python技巧和?tips,這些技巧將根據其首字母按?A-Z?的順序進行展示,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-02-02
  • CentOS 7如何實現定時執(zhí)行python腳本

    CentOS 7如何實現定時執(zhí)行python腳本

    這篇文章主要介紹了CentOS 7如何實現定時執(zhí)行python腳本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python使用Networkx實現復雜的人物關系圖

    Python使用Networkx實現復雜的人物關系圖

    日常工作、生活中我們經常會遇到一些復雜的事務關系,比如人物關系,那如何才能清楚直觀的看清楚這些任務關系呢?所以小編給大家介紹了Python如何使用Networkx實現復雜的人物關系圖,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 如何在Python項目中引入日志

    如何在Python項目中引入日志

    在開發(fā)一些大型項目的時候,都會使用日志來記錄項目運行時產生的信息,以備出錯時定位分析和從日志信息中提取數據統(tǒng)計分析等。在 Python 中使用 logging 內置模塊即可對項目進行日志的配置。
    2021-05-05

最新評論