Python3解决棋盘覆盖问题的方法示例


Posted in Python onDecember 07, 2017

本文实例讲述了Python3解决棋盘覆盖问题的方法。分享给大家供大家参考,具体如下:

问题描述:

在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖所有棋盘上的其余所有方格,不能重叠。

Python3解决棋盘覆盖问题的方法示例

代码如下:

def chess(tr,tc,pr,pc,size):
  global mark
  global table
  mark+=1
  count=mark
  if size==1:
    return
  half=size//2
  if pr<tr+half and pc<tc+half:
    chess(tr,tc,pr,pc,half)
  else:
    table[tr+half-1][tc+half-1]=count
    chess(tr,tc,tr+half-1,tc+half-1,half)
  if pr<tr+half and pc>=tc+half:
    chess(tr,tc+half,pr,pc,half)
  else:
    table[tr+half-1][tc+half]=count
    chess(tr,tc+half,tr+half-1,tc+half,half)
  if pr>=tr+half and pc<tc+half:
    chess(tr+half,tc,pr,pc,half)
  else:
    table[tr+half][tc+half-1]=count
    chess(tr+half,tc,tr+half,tc+half-1,half)
  if pr>=tr+half and pc>=tc+half:
    chess(tr+half,tc+half,pr,pc,half)
  else:
    table[tr+half][tc+half]=count
    chess(tr+half,tc+half,tr+half,tc+half,half)
def show(table):
  n=len(table)
  for i in range(n):
    for j in range(n):
      print(table[i][j],end=' ')
    print('')
mark=0
n=8
table=[[-1 for x in range(n)] for y in range(n)]
chess(0,0,2,2,n)
show(table)

n是棋盘宽度,必须是2^k,本例中n=8,特殊格子在(2,2)位置,如下图所示:

Python3解决棋盘覆盖问题的方法示例

采用分治法每次把棋盘分成4份,如果特殊格子在这个小棋盘中则继续分成4份,如果不在这个小棋盘中就把该小棋盘中靠近中央的那个格子置位,表示L型骨牌的1/3占据此处,每一次递归都会遍历查询4个小棋盘,三个不含有特殊格子的棋盘置位的3个格子正好在大棋盘中央构成一个完整的L型骨牌,依次类推,找到全部覆盖方法。运行结果如下:

Python3解决棋盘覆盖问题的方法示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
跟老齐学Python之玩转字符串(1)
Sep 14 Python
python登陆asp网站页面的实现代码
Jan 14 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
浅谈python之新式类
Aug 12 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Python元组知识点总结
Feb 18 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
python实现对excel进行数据剔除操作实例
Dec 07 #Python
Python编程实现使用线性回归预测数据
Dec 07 #Python
机器学习10大经典算法详解
Dec 07 #Python
机器学习的框架偏向于Python的13个原因
Dec 07 #Python
python编程线性回归代码示例
Dec 07 #Python
基于Django的ModelForm组件(详解)
Dec 07 #Python
利用python编写一个图片主色转换的脚本
Dec 07 #Python
You might like
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
JS的千分位算法实现思路
2013/07/31 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python中return self的用法详解
2018/07/27 Python
浅析python的优势和不足之处
2018/11/20 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
Python实现数字的格式化输出
2020/08/01 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
商务日语专业毕业生求职信
2013/10/26 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
中国央视网签名寄语
2014/01/18 职场文书
幼儿园家长寄语
2014/04/02 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
人与自然的观后感
2015/06/18 职场文书
法定代表人资格证明书
2015/06/18 职场文书