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 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
python文件与目录操作实例详解
Feb 22 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
详解Python打包分发工具setuptools
Aug 05 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
通过代码简单了解django model序列化作用
Nov 12 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 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增删改查示例自己写的demo
2013/09/04 PHP
php实现socket推送技术的示例
2017/12/20 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
浅谈js原生拖放
2016/11/21 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
python打开网页和暂停实例
2014/09/30 Python
python实现无证书加密解密实例
2014/10/27 Python
python执行get提交的方法
2015/04/29 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
Python列表解析操作实例总结
2020/02/26 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
十一酒店活动方案
2014/02/20 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
高中生逃课检讨书
2014/10/10 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
个人承诺书格式范文
2015/04/29 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书