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和C语言混合编程实例
Jun 04 Python
Python中操作MySQL入门实例
Feb 08 Python
Python中修改字符串的四种方法
Nov 02 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
Python实现语音识别和语音合成功能
Sep 20 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
浅析Python模块之间的相互引用问题
Feb 26 Python
pandas取dataframe特定行列的实现方法
May 24 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
ext实现完整的登录代码
2008/08/08 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
JS的数组迭代方法
2015/02/05 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
Python 异常处理实例详解
2014/03/12 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python多继承顺序实例分析
2018/05/26 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
kali中python版本的切换方法
2019/07/11 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
函授自我鉴定范文
2014/02/06 职场文书
企业精神口号
2014/06/11 职场文书
电子工程求职信
2014/07/17 职场文书
社区两委对照检查材料
2014/08/23 职场文书
总经理岗位职责
2015/02/04 职场文书
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis