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下的Mysql模块MySQLdb安装详解
Apr 09 Python
简单分析Python中用fork()函数生成的子进程
May 04 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python中Proxypool库的安装与配置
Oct 19 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
python实现低通滤波器代码
Feb 26 Python
python selenium操作cookie的实现
Mar 18 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
python如何提升爬虫效率
Sep 27 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 无限级 SelectTree 类
2009/05/19 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
php的常量和变量实例详解
2017/06/27 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
js判断非127开头的IP地址的实例代码
2020/01/05 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python条件和循环的使用方法
2013/11/01 Python
Python列表生成器的循环技巧分享
2015/03/06 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python匿名函数的使用方法解析
2019/10/10 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
基于python 取余问题(%)详解
2020/06/03 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
为什么需要版本控制
2016/10/28 面试题
2015年幼儿园毕业感言
2014/02/12 职场文书
园林技术专业求职信
2014/07/28 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
2015年团支书工作总结
2015/04/03 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
抢劫罪辩护词
2015/05/21 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书