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 08 Python
python中使用序列的方法
Aug 03 Python
Python制作爬虫抓取美女图
Jan 20 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
详解python之配置日志的几种方式
May 22 Python
python如何实现反向迭代
Mar 20 Python
Django后台获取前端post上传的文件方法
May 28 Python
python梯度下降法的简单示例
Aug 31 Python
Python中的函数式编程:不可变的数据结构
Oct 08 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
Python基于gevent实现文件字符串查找器
Aug 11 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
玩转虚拟域名◎+ .
2006/10/09 PHP
将数组写入txt文件 var_export
2009/04/21 PHP
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
jQuery总体架构的理解分析
2011/03/07 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python属性和内建属性实例解析
2020/01/14 Python
python实现126邮箱发送邮件
2020/05/20 Python
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
药学专业个人自我评价
2013/11/11 职场文书
任课老师推荐信范文
2013/11/24 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
社区灵活就业证明
2014/11/03 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL
Python序列化与反序列化相关知识总结
2021/06/08 Python
vue特效之翻牌动画
2022/04/20 Vue.js
使用Django框架创建项目
2022/06/10 Python