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中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
django之常用命令详解
Jun 30 Python
打包发布Python模块的方法详解
Sep 18 Python
Django的信号机制详解
May 05 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
使用python进行拆分大文件的方法
Dec 10 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
简单的命令查看安装的python版本号
Aug 28 Python
Python模拟登录和登录跳转的参考示例
Oct 30 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正则表达式使用的详细介绍
2013/04/27 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
php依赖注入知识点详解
2019/09/23 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
vue项目实战总结篇
2018/02/11 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
webpack的CSS加载器的使用
2018/09/11 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
如何表示python中的相对路径
2020/07/08 Python
详解Python中第三方库Faker
2020/09/25 Python
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
某公司.Net方向面试题
2014/04/24 面试题
安全事故检讨书
2014/01/18 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
学校党员对照检查材料
2014/08/28 职场文书
环保证明
2015/06/23 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL