算法分析解题报告棋盘问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
河南理工大学计算机学院 算法分析解题报告 棋盘覆盖问题 专业:软件工程.net 11-03班 学号:311109070314 姓名:李少伟 1 ?问题描述: 在-个2kX2k (k20)个方格组成的棋盘中,恰有-个方格 与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可 能岀现的位置有42种,因而有4k种不同的棋盘,下图所示是k=2 时16种棋盘中的一个。棋盘覆盖问题(chess cover problem)要求 用下图所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以 外的所有方格,且任何2个L型骨牌不得重叠覆盖。 Q)k二2 Q)k二2时 田 (4种1骨牌 2.解题思路 关键技术:分治与递归 分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同, 并且每个子棋盘均包含一个特殊方格(这句话很重耍),从而将原问题 分解为规模较小的棋盘覆盖问题。先把原始棋盘划分成4个相等的棋 盘,由于棋盘只有一个特殊棋盘,所以这4个子棋盘中只有一个子棋 盘包含该特殊棋盘,以便采用递归的方法求解,可以用1一个L型骨 牌覆盖这3个较小棋盘的汇合处。从而将原问题转换为4个较小规模 的棋盘覆盖问题。递归使用这种划分策略,直至将棋盘分割为1*1的 子棋盘。 ?解决方案 数据结构设计: 棋盘:可以一个二维数组board[size] [size]表示一个棋盘, 其中,size二2鼻。为了在递归处理的过程中使用同一个棋盘,将数 组board设置为全局变量 子棋盘:子棋盘由原始棋盘数组board的行下标列下标tc 特殊方格:用board [dr] [de]表示特殊方格,dr和de表示该特 殊方格的在二维数组board中的下标 L型骨牌:一个(2飞)* (2d)的棋盘中有一个特殊方格,所 以用到L型骨牌的个数为(42 - 1) /3,将所有L型骨牌从1开始 连续编号,同一个骨牌有3个方格组成,这3个方格用同一个编号。 ?源代码 〃问题描述:在一个27X22 (k^O)个方格组成的棋盘中, 恰有…个方格与其他方格不同,称该方格为特殊方格。显然,特殊方 格在棋盘中可能出现的位置有47种,因而有4k种不同的棋盘,图 4. 10(a)所示是k二2时16种棋盘中的一个。棋盘覆盖问题(chess cover problem)要求用下图所示的4种不同形状的L型骨牌覆盖给 定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠 覆盖。 〃解题思路:分治的技巧在于如何划分棋盘,使划分后的子 棋盘的大小相同,并且每个了棋盘均包含一个特殊方格(这句 话很重要),从而将原问题分解为规模较小的棋盘覆盖问题。 先把原始棋盘划分成4个相等的棋盘,由于棋盘只有一个特殊 棋盘,所以这4个子棋盘中只有一个子棋盘包含该特殊棋盘, 以便采用递归的方法求解,可以用1 一个L型骨牌覆盖这3个 较小棋盘的汇合处。从而将原问题转换为4个较小规模的棋盘 覆盖问题。递归使用这种划分策略,直至将棋盘分割为1*1的 子棋盘。 〃关键技术:分治与递归 〃开发语言:C++ 〃运行环境:DEV-C++ 5 〃开发日期:2014年4月10日 #include stdio.h #include stdlib.h #define N 100 int board[N][N]; int t; void ChessBoard(int tr, int tc, int dr, int de, int size) int m,s; if(size=l) return; m=++t; s=size/2; if(drtr+sdctc+s) chessboard(tr,tc,dr,dc,s); else { board [tr+s-1 ] [tc+s-l]=m; chessboard(tr,tc,tr+s-1 ,tc+s? 1 ,s); } if(drtr+sdctc+s) chessboard(tr,tc,dr,dc,s); else { board [tr+s-1 ] [tc+s]=m; chessboard(tr,tc,tr+s-1 ,tc+s,s); } if(drtr+sdcvtc+s) chessboard(tr,tc,dr,dc,s); else board [tr+s] [tc+s-l]=m; chessboard(tr,tc,tr4-s,tc-t-s-l,s); } if(drtr+sdctc+s) chessboard(tr,tc,dr,dc,s); else { board [tr+s] [tc+s]=m; chessboard(tr,tc,tr+s,tc+s,s); void print(int n) { int i,j; for(i=0;ivn;i++) for (j=O;jvn;j++) print

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档