中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在python中使用tkinter庫實現棋盤覆蓋圖形界面

發布時間:2021-06-04 17:51:01 來源:億速云 閱讀:238 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關如何在python中使用tkinter庫實現棋盤覆蓋圖形界面,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、解決方案和關鍵代碼

工具: python tkinter庫

問題描述:

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

如何在python中使用tkinter庫實現棋盤覆蓋圖形界面

解決方法:遞歸與分治法

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

如何在python中使用tkinter庫實現棋盤覆蓋圖形界面

算法關鍵代碼

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)

如何在python中使用tkinter庫實現棋盤覆蓋圖形界面

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

 如何在python中使用tkinter庫實現棋盤覆蓋圖形界面

關于如何在python中使用tkinter庫實現棋盤覆蓋圖形界面就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浪卡子县| 融水| 盐亭县| 甘孜县| 桐柏县| 杭州市| 平原县| 新平| 胶州市| 甘德县| 龙口市| 山阳县| 安溪县| 余干县| 贺州市| 平武县| 民丰县| 和田市| 丰原市| 阳泉市| 娱乐| 西和县| 革吉县| 噶尔县| 武冈市| 卢氏县| 正蓝旗| 曲周县| 丰顺县| 定襄县| 永寿县| 龙海市| 景宁| 闽侯县| 拉孜县| 海阳市| 革吉县| 西丰县| 安陆市| 托克逊县| 凤台县|