- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
残缺棋盘问题
残缺棋盘问题的VC++实现
问题分析
残缺棋盘(defective chessboard)是一个有2k×2k个方格的棋盘,其中恰有一个方格残缺。图1给出k≤2时各种可能的残缺棋盘,其中残缺的方格用阴影表示。注意当k=0时,仅存在一种可能的残缺棋盘(如图1a所示)。事实上,对于任意k,恰好存在22k种不同的残缺棋盘。
残缺棋盘的问题是:要求用三格板(triominoes)覆盖残缺棋盘(如图2所示)。在此覆盖中,两个三格板不能重叠,三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。在这种限制条件下,所需要的三格板总数为(22k-1)/3。可以验证(22k-1)/3是一个整数。k为0的残缺棋盘很容易被覆盖,因为它没有非残缺的方格,用于覆盖的三格板的数目为0。当k=1时,正好存在3个非残缺的方格,并且这三个方格可用图2中的某一方向的三格板来覆盖。
用分而治之方法可以很好地解决残缺棋盘问题。这一方法可将覆盖2k×2k残缺棋盘的问题转化为覆盖较小残缺棋盘的问题。2k×2k棋盘一个很自然的划分方法就是将它划分为如图3a所示的4个2k-1×2k-1棋盘。注意到当完成这种划分后,4个小棋盘中仅仅有一个棋盘存在残缺方格。首先覆盖其中包含残缺方格的2k-1×2k-1残缺棋盘,然后把剩下的3个小棋盘转变为残缺棋盘,为此将一个三格板放在由这3个小棋盘形成的角上,如图3b所示,其中原2k×2k棋盘中的残缺方格落入左上角的2k-1×2k-1棋盘。可以采用这种分割技术递归地覆盖2k×2k残缺棋盘。当棋盘的大小减为1×1时,递归过程终止。此时1×1的棋盘中仅仅包含一个方格且此方格残缺,所以无需放置三格板。
图1
图2
图3
算法选择
用分而治之方法解决此问题,即为了解决一个大的问题,可以:1)把它分成两个或多个更小的问题;2)分别解决每个小问题;3)把各小问题的解答组合起来,即可得到原问题的解答。小问题通常与原问题相似,可以递归地使用分而治之策略来解决。选用递归算法,先构造一个函数,专门用与递归实现棋盘补充问题。入口参数分别为棋盘左上角点坐标,棋盘右下角点坐标,棋盘残缺点坐标。这三个参数与每次调用它们的棋盘的阶数有关。第一步,取棋盘中点,先判断残缺点的X,Y在哪一个区域,同时可覆盖三个小方格,即四个区域分别设定每一个区域的左上角,右下角和缺点.将它们分别存入一个数组中。棋盘划分一次,棋子增加3个,棋盘减少一个,同时又新增加4个棋盘。递归函数调用,直至所有的子棋盘都被覆盖。
方案设计
(1)功能部分
本程序的工作除了在View类中实现游戏的开始,暂停,停止外,主要是设计了残缺棋盘类CDefBoard。在残缺棋盘类CDefBoard中主要实现了:递归算法实现, 自动创建棋盘,自动创建缺点,棋盘绘制,缺点绘制等(手动创建棋盘部分只让k在1-4间取值,是为了既说明了问题,又可以达到界面美观的目的)。
(2)界面美化部分
本程序的界面美化部分主要包括:
启动登陆画面的添加;
工具条图标实现了真彩化,精心找得图标,尽量使其达到美观的目的。
4.编程实现
(1) 功能实现:
1) 残缺棋盘类CDefBoard
成员变量:
(a) tricount变量表示三角板个数;
(b) m_Size为边长属性,m_DefectR与m_DefectC为缺点的行值与列值。
(c) Apoint,Bpoint,Cpoint三个数组分别存储每块三角板的第一块、第二块、第三块的行列值。
成员函数:
(a) SuanFa()函数是递归算法的具体体现;
(b) AutoBoard()和AutoDefect()函数用于被视图类中自动生成棋盘函数的调用,实现对随机生成棋盘边长和缺点位置并先后画到视图区中。
(c) DrawDefect(CDC *pDC)和MyDraw(CDC *pDC)函数用于画缺点和棋盘;
(d) Serialize(CArchive ar)实现棋盘的存储,即分别将Apoint,Bpoint,Cpoint三个数组串行储存于文件中,需要时再串行输出。
2) 视图类CDefChessBView
成员变量:
(a) AddDefectFlag是否加缺点的标志位;
(b) BoardFlag是否生成棋盘的标志位;
(c) DefectFlag是否创建缺点的标志位;
(d) StopFlag是否停止的标志位;
(e) PauseFlag是否暂停的标志位;
(f) StartFlag是否开始的标志位;
(g) AutoFlag是否自动生成残缺棋盘的标志位。
成员函数:
(a) OnAutocreat()函数用于响应用户指令“自动创建棋盘及缺点”;
(b) OnCreatboard()函数用于响应“手动生成棋盘”;
(c) OnCreatdefect()函数用于响应“手动创建缺点”;
(d) On
您可能关注的文档
- 129791222947500000实验二数据库设计.doc
- 数学思想篇函数与方程数形结合.doc
- 信息管理与调查研究(08级教案).ppt
- 电路理论课件(第04讲).ppt
- 化学反应速率及化学平衡第一课时作业.doc
- 切割实训 - 副本.doc
- 1.5概率论.ppt
- 学习法律的心得.doc
- 【中青留学(济南)】:西班牙大学巴塞罗那自治大学.doc
- 暑期社会实践—机械类.doc
- 景洪市公安局2026年警务辅助人员招聘备考题库完整参考答案详解.docx
- 招商银行东莞分行2026年社会招聘备考题库及一套参考答案详解.docx
- 成都市新都区2025年12月公开招聘街道社区消防站消防员的备考题库完整答案详解.docx
- 深圳大学附属华南医院2026年1月公开选聘事业单位工作人员备考题库及完整答案详解一套.docx
- 榆林市第二十六幼儿园2026年招聘备考题库完整参考答案详解.docx
- 深圳法院2025年下半年劳动合同制审判辅助人员招录备考题库及参考答案详解1套.docx
- 沈阳理工大学2026年面向优秀退役运动员招聘体育教师备考题库及1套参考答案详解.docx
- 通知备考题库湛江市坡头区官渡镇人民政府2026年公开招聘编外人员备考题库有答案详解.docx
- 枞阳县投资发展有限公司2025年公开选聘工作人员备考题库及参考答案详解一套.docx
- 柳州市柳江区第二中学2026年春学期招聘聘用制英语教师1名、道法教师1名备考题库及完整答案详解1套.docx
最近下载
- 组织分布研究实例.pptx VIP
- 专项资金项目验收专项审计报告参考模板.docx VIP
- 投资注资入股协议书.docx VIP
- 中铁建现场安全标准化指导手册(房建分册).docx
- T_CWAN 0026-2021 T_CEEIA 507-2021 MIG_MAG焊枪电缆技术要求.docx VIP
- 时事政治必考试题库及(2025年)附完整答案详解(各地真题).docx VIP
- 07J501-1图集参考标准文件.pdf VIP
- 华东交通大学材料力学期末模拟试题二.docx VIP
- 森林火灾扑救技术规程.docx VIP
- 道路运输企业和城市客运企业安全生产重大事故隐患判定标准(试行).docx VIP
原创力文档


文档评论(0)