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中实现三目运算的方法
Jun 21 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
python动态视频下载器的实现方法
Sep 16 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
Python telnet登陆功能实现代码
Apr 16 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
python实现批量移动文件
Apr 05 Python
python numpy中setdiff1d的用法说明
Apr 22 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
如何过滤高亮显示非法字符
2006/10/09 PHP
PHP 危险函数全解析
2009/09/09 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
js实时获取系统当前时间实例代码
2013/06/28 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
详解JS数值Number类型
2018/02/07 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
python中的多线程实例教程
2014/08/27 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
Python中类的初始化特殊方法
2017/12/01 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
优秀教师的感人事迹
2014/02/04 职场文书
房屋转让协议书范本
2014/04/11 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
语文课外活动总结
2014/08/27 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫