一、问题描述

在一个2k×2 k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。 棋盘覆盖问题要求用图所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

二、问题分析

首先,从最简单的情况开始考虑,如果只是一个2x2的棋盘,那么肯定是有解的,因为这就是最基本的情况。

但是当n很大的时候,该问题还有解吗?这是我们需要考虑的问题。

这个我们可以利用数学归纳法来证明:

假设当n = k的时候该问题有解,那么如何证明当n = k + 1的时候也有解呢?

证明过程如下:

我们可以n = k + 1的棋盘的正中央的2x2的方格中放置一个L型骨牌,使得剩下的三个子棋盘都具有自己的特殊方格。
那么此时该问题就被划分成了四个子问题。
而根据假设:当n = k的时候该问题有解。
所以当n = k + 1的时候,也相应有解。


三、数据结构设计

经过上述的分析之后,我们就可以利用分治的方法来解决这个问题。

通过上述分析我们即可知道,在分治的过程中,遇到子棋盘没有特殊方格的时候,我们就给予这个棋盘的父棋盘中心点处给予一个特殊方格,从而三个组合在一起就是一个完整的L型骨牌。

那么我们就可以进行数据结构的设计了:

如下图所示:


四、算法设计

五、代码分析

观察上述代码可以发现,算法的整个部分采用了四个递归,分成了四种情况:

  1. 特殊方格在第1象限
  2. 特殊方格在第2象限
  3. 特殊方格在第3象限
  4. 特殊方格在第4象限

如果特殊方格在第二象限,就继续对第二象限进行划分,直到划分为4个1x1的小方格。

当划分到没有特殊方格的时候,就需要补方格了。

这时要注意,每一层的递归,L型骨牌的数量也要随之递增。

而当第二象限被填满的时候,递归就要往回走了。一直走到最开始的第一层函数调用,开始走第二个if判断,发现第一象限没有特殊方格,因此给第一象限的左下角补上一个特殊方格,然后开始在第一象限内调用递归函数,以此类推…

过程如下图所示:

「分治法」棋盘覆盖问题相关推荐

  1. 分治法解决棋盘覆盖问题

    分治法解决棋盘覆盖问题 问题描述: 在一个2k×2k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格.显然,特殊方格在棋盘中出现的位置有4k中情形,因而有4k中不同的棋盘. ...

  2. 【分治法】棋盘覆盖问题java实现

    文章目录 问题描述 问题分析 算法设计 java代码 问题描述 在一个2k × 2k个放个中,恰好只有一个方格是残缺的.也就是在这个棋盘中有一个方格与其它的格子不同, 我们称这种棋盘为残缺棋盘. 下图 ...

  3. 分治法:快速排序棋盘覆盖

    目标 使用分治法解决快速排序问题 使用分治法解决棋盘覆盖问题 原理 一.快排原理 排序算法在工作中最常用,也是学习很多其他算法的前置知识,例如在运用二分查找算法之前,我们通常需要保证数据是有序的,如果 ...

  4. java棋盘覆盖分治法,棋盘覆盖-分治法

    信 息 工 程 学 院 算法分析 实习报告 学院:信息工程学院 班级:软件工程083 姓名: 学号: 成绩: 一.实习题目 : 棋盘覆盖 二.实习过程 : 1.了解分治法的思想: 将一个难以解决的大问 ...

  5. 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc

    分治算法求解棋盘覆盖问题互动教学过程 分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大.对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引 ...

  6. 棋盘覆盖问题--分治策略

    问题描述: 在一个2k×2k (k≥0,k为上标)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格.棋盘覆盖问题要求用图(b)所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外 ...

  7. python棋盘覆盖问题,python实现棋盘覆盖问题及可视化

    问题介绍 棋盘覆盖问题,是一种编程问题. 如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆 ...

  8. python棋盘覆盖问题,python怎么实现棋盘覆盖问题及可视化

    python怎么实现棋盘覆盖问题及可视化 发布时间:2021-03-12 17:04:06 来源:亿速云 阅读:94 作者:TREX 这篇文章主要介绍"python怎么实现棋盘覆盖问题及可视 ...

  9. 棋盘覆盖-经典的分治法问题

    棋盘覆盖-经典的分治法问题 一.问题概述 二.适用方法 三.代码展示 四.运行结果 五.算法分析 一.问题概述 在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格, ...

最新文章

  1. linux unset命令,Linux unset命令
  2. JspServlet
  3. Java 洛谷 P1219 八皇后
  4. fatal error: alsa/asoundlib.h: 没有那个文件或目录错误解决办法
  5. linux5.4无法远程,利用Xmanager_在RedHat5.4下实现Linux远程桌面
  6. linux的基础知识——多线程gdb调试
  7. brctl 设置ip_docker配置独立桥接IP的方法
  8. [erlang]一次erlcron崩溃引起的事故分析
  9. [JSOI2009]瓶子和燃料
  10. 保研复习——信号与系统1:信号与系统(绪论)
  11. 小爱同学app安卓版_小爱同学3.0版本下载-小爱同学3.0安装包下载v5.0.62 安卓最新版-2265安卓网...
  12. 介绍一个可以轻松下载病毒样本的数据库
  13. php劳务派遣系统,劳务派遣系统搭建
  14. 1编写偏移量为3的凯撒密码大小写混合加密程序(50分)
  15. 【10个精品网站】找素材、找图片、PDF在线工具、免费图片降噪修复、免费可商用字体、PPT模板
  16. Java图片嵌套图片
  17. 工业物联网的价值有哪些
  18. 数据挖掘利器 selenium实战案例--论文数据挖掘与可视化分析(上)
  19. 水滴筹赴美上市:以“善良”为名的生意经
  20. 快速远程桌面公司内网电脑,远程OA/ERP/BUG/NAS【无需公网IP】

热门文章

  1. CentOS 7下Cloudera Manager及CDH 6.0.1安装教程
  2. 手机摄像头介绍及其参数配置
  3. 2020年大学计算机基础实验4,2020年新版大学计算机基础实验报告word操作word.docx...
  4. 很有趣的MM,你叫她做什么她就做什么,希望不是火星。
  5. 学习记录_C语言打砖块小游戏
  6. 2019上海到南京的医疗保险转移
  7. 王小波的灾难——由《王小波全集》想到的
  8. C语言以菜单方式进入属于,2009“高职升本科”计算机试卷及参考答案
  9. ETCD出现:certificate specifies an incompatible key usage 解决方案
  10. 如何将jpg图片转换为psd格式?教你3招巨简单