问题描述:在一个的方格组成的棋盘中,有一个方格与其他的方格不同,称之为奇异块。要求:若使用一下四种L型骨牌覆盖除这个奇异块的其他方格,覆盖过程中L型骨牌之间不能有互相覆盖,设计算法求出覆盖方案。(四种L型骨牌如下图)

算法思想:分治法。

分治法原理:1.划分2.求解3.合并。将原始问题分解为如果个互不相同的子问题,对子问题进行求解。

(1)解题思路:

1.当k>0时,可以将  棋盘由中心划分为对称的四份小棋盘(子问题划分)此时,我们很容易知道奇异块一定在其中一个子棋盘中,其他三个相邻的子棋盘没有奇异块。Divide

2.使用一个合适的L型骨牌,覆盖三个没有奇异块的子方格(覆盖方法及L型骨牌的选取:将L型骨牌i在中心处覆盖。可参考下图)将覆盖的L型骨牌在其余三个子棋盘中视为奇异块,我们便得到了4个的棋盘覆盖问题。

3.继续递归处理四个子棋盘直到划分的子棋盘恰好为一个奇异块为止。Conquer

(2)c++代码实现(伪代码):

算法:ChessBoard(tr,tc,dr,dc,n)
全局变量:tile = 1;//被覆盖的方格记号Board[n][n]=0;//标记棋盘被覆盖的方格
输入:tr,tc;//棋盘的左上角行号、列号dr,dc;//特殊方格行号、列号n;//棋盘尺寸n*n
执行:
ChessBoard(0,0,dr,dc,k)
/*****************************************************************************************/
ChessBoard(tr,tc,dr,dc,n)
{if(k==0)return;t = tile++;n = n/2;//1.检验左上角是否有奇异块if(dr<tr+n&&dc>tc+n){ChessBoard(tr,tc,dr,dc,n);}//奇异块在此棋盘之中(左上角)else{Board[tr+n-1][tc+n-1] = tile;//将该方格覆盖并标记ChessBoard(tr,tc,tr+n-1,tc+n-1,n);//对左上角进行递归(将新覆盖的方格视为奇异块)}//2.检验右上角if(dr<tr+n&&dc>=tc+n){ChessBoard(tr,tc+n,dr,dc,n);}else{Board[tr+n-1][tc+n] = tile;ChessBoard(tr,tc+n,tr+n-1,tc+n,n);}//3.检验左下角if(dr>=tr+n&&dc<tc+n){ChessBoard(tr+n,tc,dr,dc,n);}else{Board[tr+n][tc+n-1] = tile;ChessBoard(tr+n,tc,tr+n,tc+n-1,n);        }//4.检验右下角if(dr>=tr+n&&dc>=tc+n){ChessBoard(tr+n,tc+n,dr,dc,n);}else{Board[tr+n][tc+n] = tile;ChessBoard(tr+n,tc+n,tr+n,tc+n,n);}
}

注释:理解算法代码中的连串if-else语句非常重要!

(示意图:供理解和参考)

浅谈棋盘覆盖问题(算法思想及伪代码)相关推荐

  1. 2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现

    2路插入排序算法是在直接插入排序算法的基础上增加了一个辅助数组,其目的是减少排序过程中的移动次数,需要增加n个记录的辅助空间. 难点可能在于对取余的考虑吧,可以把辅助数组看成一个环状空间,这样就能更好 ...

  2. python算法程序_浅谈python常用程序算法

    一.冒泡排序: 1.冒泡排序是将无序的数字排列成从小到大的有序组合: 过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程. 规律: 1.冒泡排序的趟数时固定的:n-1 ...

  3. 数学知识与计算机科学中的应用,浅谈计算机科学技术在数学思想中的应用

    浅谈计算机科学技术在数学思想中的应用 随着科学技术水平的不断提升和科学技术不断地影响着人们生活和工作的方方面面,计算机在我们生活中的普及度越来越高,对 (本文共1页) 阅读全文>> 随着互 ...

  4. 浅谈数学在计算机科学中的应用,浅谈计算机科学技术在数学思想中的应用(原稿)...

    <浅谈计算机科学技术在数学思想中的应用(原稿).doc>由会员分享,可免费在线阅读全文,更多与<浅谈计算机科学技术在数学思想中的应用(原稿)>相关文档资源请在帮帮文库(www. ...

  5. 技术分享:浅谈滴滴派单算法

    浅谈滴滴派单算法 原创: 王犇 刘春阳 徐哲 滴滴技术 桔妹导读:说到滴滴的派单算法,大家可能感觉到既神秘又好奇,从出租车扬召到司机在滴滴平台抢单最后到平台派单,大家今天的出行体验已经发生了翻天覆地的 ...

  6. **浅谈三角测距激光雷达测距算法**

    浅谈三角测距激光雷达测距算法 此篇文章主要对我这半年以来对激光雷达光斑定位算法上一些粗浅的见解,三角测距的基本原理在这里就不做基本的叙述,百度一下都有.本文主要对三角法激光雷达比较重要和比较难以匹配的 ...

  7. 浅谈网络流的基本算法

    引言 过去听起来高深莫测的网络流算法,现在已飞入寻常百姓家了,对于每一个OIER,网络流是一个神圣的东西(个人见解),但神圣的同时,它并不是那样抽象,最形象的模型就是水流,从长江源点无限的向外流水,而 ...

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

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

  9. 浅谈单图像三维重建算法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨lcl 来源丨 我爱计算机视觉 本文简单带大家看一下单图像三维重建相关的论文.写这篇文章算是对之 ...

最新文章

  1. gpio pin和pad的区别
  2. Node.js + Express 4.x + MongoDB 构建登录注册-简易用户管理(四)
  3. 【Linux】6.服务器会话的screen用法
  4. 2021年10月份自考感悟
  5. Pycharm Pro 2018.2 汉化专业激活破解
  6. mysql 编码和汉字存储占用字节问题的探索
  7. 系统调用软中断处理程序system_call分析
  8. java语言执行模式,使用java.exe执行静默模式
  9. 在python中输入圆的半_python根据圆的参数方程求圆上任意一点的坐标
  10. 将winform窗体钉在桌面上
  11. 两片关于NAND FLASH的好博客
  12. jieba分词的原理
  13. html商城网站模板
  14. mybatis插件的执行顺序
  15. 怎么把ide改成ahci_怎么IDE改成AHCI
  16. 简单爬取百度百科周杰伦所有歌的歌词
  17. 跳跃游戏 改 dfs
  18. 新建的html文件都不能显示图片,WindowsXp系统打开网页无法显示图片的解决方案...
  19. gym101908 C. Pizza Cutter(平面几何欧拉定理,树状数组求逆序对)
  20. 追光的人 团队团队展示

热门文章

  1. opencv血管分割——边缘检测
  2. Android中使用JiaoZiVideoPlayer来实现视频列表播放的效果
  3. 国民技术 N32G435封装示意图 和 引脚定义
  4. 显示器能引起眼睛疲劳原因总结从而防止眼睛疲劳保护眼睛
  5. 排序算法整合(冒泡,快速,希尔,拓扑,归并)
  6. 顶会论文 | 阿里云视频摘要SOTA模型:用于视频摘要的多层时空网络
  7. PHP使用jwt完成苹果登录
  8. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储
  9. 回顾10年职业生涯,重新启航
  10. MetInfo-CMS,米拓CMS 后台页面修改日记(第一次整理)