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 开发者节省时间的10个方法
Oct 02 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
深入浅出学习python装饰器
Sep 29 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
Python操作redis和mongoDB的方法
Dec 19 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 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
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
Vue基础配置讲解
2019/11/29 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python解析xml文件实例分析
2015/05/27 Python
python套接字流重定向实例汇总
2016/03/03 Python
python3音乐播放器简单实现代码
2020/04/20 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
Python检测网络延迟的代码
2018/05/15 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
美国创意之家:BulbHead
2017/07/12 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
物流管理应届生求职信
2013/11/07 职场文书
四年级学生评语大全
2014/04/21 职场文书
家长建议怎么写
2014/05/15 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android