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对列表中的各项进行关联详解
Aug 15 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
浅谈Python中的bs4基础
Oct 21 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
Python学习之os模块及用法
Jun 03 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
Python之多进程与多线程的使用
Feb 23 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世纪万年历
2006/12/06 PHP
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
PHP 进程锁定问题分析研究
2009/11/24 PHP
php中session退出登陆问题
2014/02/27 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
新浪的图片新闻效果
2007/01/13 Javascript
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
使用D3.js制作图表详解
2017/08/13 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
JS实现百度搜索框关键字推荐
2020/02/17 Javascript
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Numpy数组的保存与读取方法
2018/04/04 Python
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
教育学专业毕业生的自我评价
2013/11/21 职场文书
《夏夜多美》教学反思
2014/02/17 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
公司2014年度工作总结
2014/12/10 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android