Python3解决棋盘覆盖问题的方法示例
本文实例讲述了Python3解决棋盘覆盖问题的方法。分享给大家供大家参考,具体如下:
问题描述:
在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖所有棋盘上的其余所有方格,不能重叠。

代码如下:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
 | 
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=0n=8table=[[-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程序设计有所帮助。
Python3解决棋盘覆盖问题的方法示例的更多相关文章
- python3中reduce()函数的使用方法示例
		
reduce() 函数会对参数序列中元素进行累积,下面这篇文章主要给大家介绍了关于python中reduce()函数的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学 ...
 - 两种解决springboot 跨域问题的方法示例
		
两种解决springboot 跨域问题的方法示例,哪种方法看情况而定,自己选择.社会Boolean哥,人狠话不多,直接上代码. 第一种实现方式: 此种方式做全局配置,用起来更方便,但是无法 ...
 - 棋盘覆盖(一) ACM
		
棋盘覆盖 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求 ...
 - 解决 SQL 注入的另类方法
		
本文是翻译,版权归原作者所有 原文地址(original source):https://bitcoinrevolt.wordpress.com/2016/03/08/solving-the-prob ...
 - CODEVS 2171 棋盘覆盖
		
2171 棋盘覆盖 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 错误日志: 直接在模板上调整 \(maxn\) 时没有在相应邻接表数 ...
 - [C++] 分治法之棋盘覆盖、循环赛日程表
		
一.分治的基本思想 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之. 对于一个规模为 n 的问题,若问题可以容易地解决,则直接解决,否则将其分解为 k 个规模较小的子 ...
 - 棋盘覆盖问题 (粉书 P230 【递归】** )
		
转载自:http://blog.csdn.net/akof1314/article/details/5423608 (赞) 在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不 ...
 - 【转】解决WPF图片模糊最佳方法(绑定PixelWidth与PixelHeight)
		
解决WPF图片模糊最佳方法(绑定PixelWidth与PixelHeight) 转载自:http://www.360doc.com/content/13/1126/09/10504424_332211 ...
 - 用python代码编写象棋界面,棋盘覆盖问题
		
编写象棋界面 import turtle t=turtle.Pen() t.speed(100) def angle(x,y): t.penup() t.goto(x+3,y+3) t.pendown ...
 
随机推荐
- fastjson 请求dnslog
			
目录 payload 利用java.net.Inet[4|6]Address 参考 Fastjson <= 1.2.47 远程命令执行漏洞利用工具及方法记录 payload rmi://.lda ...
 - 如何使用 Github Actions 自动抓取每日必应壁纸?
			
如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...
 - [Elementary Mechanics Using Python-02]Feather in tornado
			
Problem 9.17 Feather in tornado. In this project you will learn to use Newton's laws and the force m ...
 - 如何实现一个简易版的 Spring - 如何实现 @Autowired 注解
			
前言 本文是 如何实现一个简易版的 Spring 系列第四篇,在 上篇 介绍了 @Component 注解的实现,这篇再来看看在使用 Spring 框架开发中常用的 @Autowired 注入要如何实 ...
 - python基础(8)python中is和==的区别详解
			
前置知识点 当我们创建一个对象时,我们要知道它内部干了些什么 1.创建了一个随机id,开辟了一片内存地址 2.自动声明了这个对象的类型type 3.给这个对象赋值value 小例子 a = 1 pri ...
 - 敏捷史话(九):用做面包的方式做敏捷——Alistair Cockburn
			
在一次用例和敏捷技术交流大会上,Alistair给大家分享了自己比较崇尚的三个字: "守""破""离",他用做面包的例子,形象地将这三个字与 ...
 - C# 基础 - linq 举例应用
			
public class Player { public string Id { get; set; } public string Name { get; set; } public int Age ...
 - WorkSkill整理之 java用Scanner 类输入数组并打印
			
输入不确定长度的数组 import java.util.*; public static void main(String[] args){ System.out.println("请输入一 ...
 - PTE 准备之   Personal introduction
			
Task strategies Be prepared! This is your opportunity to give the admissions officers a first impres ...
 - golang 二维平面求多重遮挡三角形总面积
			
解决问题描述:二维平面有很多三角形错落,可能会相互叠加落在一起,也可能互相远离.目标求出这些三角形的总占地面积. 我最开始想的解决方案是用总面积-总重叠面积 = 总占地面积.后来实现起来发现当面临多次 ...