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操作数据库(1)
Nov 25 Python
Python Socket传输文件示例
Jan 16 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
python机器学习实战之树回归详解
Dec 20 Python
详解python异步编程之asyncio(百万并发)
Jul 07 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
python缺失值的解决方法总结
Jun 09 Python
基于Python实现nc批量转tif格式
Aug 14 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 开源框架22个简单简介
2009/08/24 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
留学自荐信的技巧
2013/10/17 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
酒店采购员岗位职责
2014/03/14 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
还款承诺书范文
2014/05/20 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
成人成长感言如何写?
2019/08/16 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python