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中stdout输出不缓存的设置方法
May 29 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
python查询mysql中文乱码问题
Nov 09 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
使用pycharm生成代码模板的实例
May 23 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
Python 获取项目根路径的代码
Sep 27 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
JS无缝滚动效果实现方法分析
2016/12/21 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
幼儿园门卫岗位职责范本
2014/07/02 职场文书
作风建设年活动总结
2014/08/27 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
经销商会议开幕词
2016/03/04 职场文书
python简单验证码识别的实现过程
2021/06/20 Python
Python Pygame实战之塔防游戏的实现
2022/03/17 Python
Go语言编译原理之变量捕获
2022/08/05 Golang