Python3解决棋盘覆盖问题的方法示例

 更新时间:2017年12月07日 11:48:19   作者:littlethunder  
这篇文章主要介绍了Python3解决棋盘覆盖问题的方法,简单描述了棋盘覆盖问题的概念、原理及Python相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python3解决棋盘覆盖问题的方法。分享给大家供大家参考,具体如下:

问题描述:

在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖所有棋盘上的其余所有方格,不能重叠。

代码如下:

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)位置,如下图所示:

采用分治法每次把棋盘分成4份,如果特殊格子在这个小棋盘中则继续分成4份,如果不在这个小棋盘中就把该小棋盘中靠近中央的那个格子置位,表示L型骨牌的1/3占据此处,每一次递归都会遍历查询4个小棋盘,三个不含有特殊格子的棋盘置位的3个格子正好在大棋盘中央构成一个完整的L型骨牌,依次类推,找到全部覆盖方法。运行结果如下:

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python学习之迭代器详解

    Python学习之迭代器详解

    这篇文章主要介绍了Python中的一个新的概念,那就是迭代器 。迭代器的使用可以帮助我们提升代码的性能,接下来让我们深入了解一下迭代器吧
    2022-04-04
  • Python入门学习之类的相关知识总结

    Python入门学习之类的相关知识总结

    今天带大家复习python的基础知识,文中对类的相关知识作了非常详细的介绍,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • 对python程序内存泄漏调试的记录

    对python程序内存泄漏调试的记录

    今天小编就为大家分享一篇对python程序内存泄漏调试的记录,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python中如何使用insert函数

    python中如何使用insert函数

    这篇文章主要介绍了python中如何使用insert函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Pytorch中的数据集划分&正则化方法

    Pytorch中的数据集划分&正则化方法

    这篇文章主要介绍了Pytorch中的数据集划分&正则化方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python切片的步进、添加、连接简单操作示例

    python切片的步进、添加、连接简单操作示例

    这篇文章主要介绍了python切片的步进、添加、连接简单操作,结合实例形式分析了Python切片运算的常见操作技巧,需要的朋友可以参考下
    2019-07-07
  • 教你使用Pandas直接核算Excel中的快递费用

    教你使用Pandas直接核算Excel中的快递费用

    文中仔细说明了怎么根据账单核算运费.首先要确定运费规则,然后根据运费规则编写代码,生成核算列(快递费 = 省份*重量),最后输入账单,进行核算.将脚本件生成EXE文件,就可以使用啦,需要的朋友可以参考下
    2021-05-05
  • python不同版本的_new_不同点总结

    python不同版本的_new_不同点总结

    在本篇内容里小编给大家整理了一篇关于python不同版本的_new_不同点总结内容,有兴趣的朋友们可以学习下。
    2020-12-12
  • python脚本后台执行方式

    python脚本后台执行方式

    今天小编就为大家分享一篇python脚本后台执行方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • windows 10 设定计划任务自动执行 python 脚本的方法

    windows 10 设定计划任务自动执行 python 脚本的方法

    这篇文章主要介绍了windows 10 设定计划任务自动执行 python 脚本的方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09

最新评论