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 相关文章推荐
下载安装setuptool和pip linux安装pip    
Jan 24 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Python中二维列表如何获取子区域元素的组成
Jan 19 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
python3实现windows下同名进程监控
Jun 21 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
Python numpy线性代数用法实例解析
Nov 15 Python
python3字符串输出常见面试题总结
Dec 01 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 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
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
nodejs的压缩文件模块archiver用法示例
2017/01/18 NodeJs
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python对字典进行排序实例
2014/09/25 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
深入浅析python with语句简介
2018/04/11 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
python标准库os库的函数介绍
2020/02/12 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
高中生学习计划书
2014/09/15 职场文书
银行授权委托书样本
2014/10/13 职场文书
2015年安全月活动总结
2015/03/26 职场文书
学校开除通知书
2015/04/25 职场文书