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生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
简单易懂的python环境安装教程
Jul 13 Python
Python合并多个Excel数据的方法
Jul 16 Python
Python切片操作深入详解
Jul 27 Python
pyQT5 实现窗体之间传值的示例
Jun 20 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
Python3分析处理声音数据的例子
Aug 27 Python
解决Python3下map函数的显示问题
Dec 04 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 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 session和cookie使用说明
2010/04/07 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
浅谈Javascript事件模拟
2012/06/27 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
JS实现简易日历效果
2021/01/25 Javascript
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
初入社会应届生求职信
2013/11/18 职场文书
电气工程师岗位职责
2014/01/01 职场文书
总经理助理职责
2014/02/04 职场文书
民族团结先进个人材料
2014/02/05 职场文书
工作建议书范文
2014/05/13 职场文书
学校安全责任书范本
2014/07/23 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
工程主管竞聘书
2015/09/15 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
七年级话题作文之执着
2019/11/19 职场文书
MySQL系列之六 用户与授权
2021/07/02 MySQL
vue递归实现树形组件
2022/07/15 Vue.js