网站大量收购独家精品文档,联系QQ:2885784924

试验报告1——棋盘覆盖问题1问题描述与分析描述残缺棋盘是.doc

试验报告1——棋盘覆盖问题1问题描述与分析描述残缺棋盘是.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
试验报告1——棋盘覆盖问题1问题描述与分析描述残缺棋盘是

实验报告1 ——棋盘覆盖问题 问题描述与分析 描述:残缺棋盘是一个有2k (2k个方格的棋盘,其中恰有一个方格残缺。现在要求用三格板覆盖残缺棋盘,覆盖过程中两个三格板不能重叠,不能覆盖残缺方格,但必须覆盖其它的所有方格。 问如何去覆盖该残缺棋盘(给出覆盖方案)? 分析: 在题目条件中可以得出: 对于任意k,恰好存在2k种不同的残缺棋盘; 对于任意k,按上面覆盖要求需要(2k-1)/3块三格板; 三格板的种类有四种: 1号 2号 3号 4号 对k 列举整数分析得,该问题可以分而治之。以k=2为例, 棋盘 可以划分为4个子棋盘,这4个子棋盘不都是与原问题相似的子问题,但是经过处理能转换成与原问题相似的子问题,转换方法:用一个合适的三格板将没有残缺块的子棋盘中各覆盖一个单元格。这样原问题就分成了4个相似的子问题。 所以采用分治算法解决该问题。 基本算法 棋盘用二维数组来表示,数组的行标表示单元格所在的行数,列标表示所在的列数,数组的元素是来存放是用第几块三格板来覆盖的三格板号。而子棋盘用它左上角的单元格所在的行,列位置来表示。棋盘的规模用行数来表示 算法描述: Cover() { If(行数2) 返回; 三个板数目加1; If(残缺方格位于左上棋盘) { Cover(); 标记覆盖1号三格板; Cover();再覆盖其它的部分 Cover(); Cover(); } If(残缺方格位于右上棋盘) { Cover(); 标记覆盖2号三格板; Cover();再覆盖其它的部分 Cover(); Cover(); } If(残缺方格位于左下棋盘) { Cover(); 标记覆盖3号三格板; Cover();再覆盖其它的部分 Cover(); Cover(); } If(残缺方格位于右下棋盘) { Cover(); 标记覆盖4号三格板; Cover();再覆盖其它的部分 Cover(); Cover(); } } 实验环境和运行平台 WindowsXP + Visual C++6.0 测试情况 测试效果如下图: 输入棋盘大小参数k 点击绘制棋盘按钮,随机产生残缺块,并正确绘制出覆盖三格板的情况。标记的数字表示第几块三格板覆盖(即覆盖方案),最大数也就是所需三格板的数目。同时用不同的颜色标记不同型号的三格板,并输出显示各种型号三格板的数目。 源码 详细源码见压缩文件包“CoverProblem” 总结 时间较短,核心算法是在理解的基础上参考《算法设计与分析》吕国英编著的教材。 该程序只是起演示算法的递归过程和理解分治算法,所以界面没有做美化等。

文档评论(0)

wangyueyue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档