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高手之路python处理excel文件(方法汇总)
Jan 07 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
Django如何防止定时任务并发浅析
May 14 Python
python图像和办公文档处理总结
May 28 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
Django Rest framework频率原理与限制
Jul 26 Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 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
php执行sql语句的写法
2009/03/10 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
《植物妈妈有办法》教学反思
2014/02/25 职场文书
法学求职信
2014/06/22 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript