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中fileno()方法的使用
May 24 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
详解Python 正则表达式模块
Nov 05 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
Python 串口读写的实现方法
Jun 12 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
python画环形图的方法
Mar 25 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
如何将json数据转换为python数据
Sep 04 Python
Python 中的函数装饰器和闭包详解
Feb 06 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
极典R601SW收音机
2021/03/02 无线电
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
Symfony查询方法实例小结
2017/06/28 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
实现JavaScript的组成----BOM和DOM详解
2016/05/18 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
Vue实现星级评价效果实例详解
2019/12/30 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python实现simhash算法实例
2014/04/25 Python
Python文件操作类操作实例详解
2014/07/11 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
金融保险专业求职信
2014/09/03 职场文书
购房协议书范本
2014/10/02 职场文书
老公保证书怎么写
2015/02/26 职场文书
个人工作决心书
2015/09/22 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
用JS写一个发布订阅模式
2021/11/07 Javascript