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在线运行代码助手
Jul 15 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
Python编写Windows Service服务程序
Jan 04 Python
Django中的forms组件实例详解
Nov 08 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Python 控制终端输出文字的实例
Jul 12 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
Aug 31 Python
Django中的模型类设计及展示示例详解
May 29 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
python 爬取京东指定商品评论并进行情感分析
May 27 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
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
php实现小程序支付完整版
2018/10/09 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
js select常用操作控制代码
2010/03/16 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Django如何将URL映射到视图
2019/07/29 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python实现弹球小游戏
2020/08/01 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
印度低票价航空公司:GoAir
2017/10/11 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
医院辞职信范文
2014/01/17 职场文书
公司离职证明范本
2014/10/17 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
2016年端午节寄语
2015/12/04 职场文书
hive数据仓库新增字段方法
2022/06/25 数据库