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制作Windows系统服务
Mar 25 Python
Python 处理数据的实例详解
Aug 10 Python
python TCP Socket的粘包和分包的处理详解
Feb 09 Python
python读取Excel实例详解
Aug 17 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
对Django url的几种使用方式详解
Aug 06 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
Python Map 函数的使用
Aug 28 Python
如何将json数据转换为python数据
Sep 04 Python
Python jieba结巴分词原理及用法解析
Nov 05 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几个数学计算的内部函数学习整理
2011/08/06 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
php头像上传预览实例代码
2017/05/02 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
使用javascript插入样式
2016/03/14 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
JS 实现分页打印功能
2018/05/16 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
Python装饰器基础概念与用法详解
2018/12/22 Python
Python如何测试stdout输出
2020/08/10 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
化学专业毕业生自荐信
2013/11/15 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
导游个人求职信
2014/04/25 职场文书
市场策划求职信
2014/08/07 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
golang中的空slice案例
2021/04/27 Golang
Python实现列表拼接和去重的三种方式
2021/07/02 Python