python自带tkinter库实现棋盘覆盖图形界面


Posted in Python onJuly 17, 2019

python实现棋盘覆盖图形界面,供大家参考,具体内容如下

一、解决方案和关键代码

工具: 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 相关文章推荐
Python之eval()函数危险性浅析
Jul 03 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
python if not in 多条件判断代码
Sep 21 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python 经纬度求两点距离、三点面积操作
Jun 03 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
python​格式化字符串
Apr 20 Python
python递归法解决棋盘分割问题
Jul 17 #Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 #Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 #Python
python递归法实现简易连连看小游戏
Mar 25 #Python
django2笔记之路由path语法的实现
Jul 17 #Python
Django之创建引擎索引报错及解决详解
Jul 17 #Python
python实现连连看辅助之图像识别延伸
Jul 17 #Python
You might like
php4的session功能评述(二)
2006/10/09 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
javascript模拟实现ajax加载框实例
2014/10/15 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
[01:57]2018年度DOTA2最具潜力解说-完美盛典
2018/12/16 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python中的多重装饰器
2015/04/11 Python
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
python修改操作系统时间的方法
2015/05/18 Python
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
django做form表单的数据验证过程详解
2019/07/26 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
全陪导游欢迎词
2014/01/17 职场文书
小学英语教学反思案例
2014/02/04 职场文书
工程质量月活动方案
2014/02/19 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
新年晚会开场白
2015/05/29 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
golang中的空slice案例
2021/04/27 Golang
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js