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压缩和解压缩zip文件
Feb 14 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 Python
Python: 传递列表副本方式
Dec 19 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
基于Python实现将列表数据生成折线图
Mar 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
实用函数5
2007/11/08 PHP
php在线打包程序源码
2008/07/27 PHP
在php和MySql中计算时间差的方法
2011/04/22 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
php简单实现多语言切换的方法
2016/05/09 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
JavaScript this调用规则说明
2010/03/08 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
python更改已存在excel文件的方法
2018/05/03 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
函授生自我鉴定
2014/03/25 职场文书
学校2014年度工作总结
2014/12/06 职场文书
经验交流材料格式
2014/12/30 职场文书