- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C课题设计报告(残缺棋阵)
********大学
暑假课题设计说明书
题 目:残缺棋阵覆盖问题
学生姓名:
学 号:
专 业:
班 级:
指导教师:
2013 年 7 月 31日
残缺棋阵覆盖问题
摘 要
关键词:目 录
I
I
9
1
3
4
4
附录(程序清单) 33
第一章 问题描述
问题描述:
残缺棋盘是一个有2^k×2^k(k≥1)个方格的棋盘,其中恰有一个方格残缺。如图给出k=1时各种可能的残缺棋盘,其中残缺的方格用阴影表示。残缺棋盘问题就是要用这四种三格板覆盖更大的残缺棋盘。在此覆盖中要求:1)两个三格板不能重叠2)三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。2^k×2^k -1)/3。可以验证(2^k×2^k -1)/3是一个整数。k为0的残缺棋盘很容易被覆盖,因为它没有非残缺的方格,用于覆盖的三格板的数目为0。当k=1时,正好存在3个非残缺的方格,并且这三个方格可用任意一方的三格板来覆盖。
第二章 需求分析
从可以发现
当残缺方格在第1个子棋盘,用号三格板覆盖其余三个子棋盘的交界方格,可以使另外三个子棋盘转化为独立子问题;
当残缺方格在第2个子棋盘时,则首先用号三格板进行棋盘覆盖
当残缺方格在第3个子棋盘时,则首先用号三格板进行棋盘覆盖
当残缺方格在第4个子棋盘时,则首先用号三格板进行棋盘覆盖,这样就使另外三个子棋盘转化为独立子问题。
本程序有四个模块,调用关系如下:
本程序的流程图:
第四章 详细设计
主要函数:
(1)、void chessBoard(int tr, int tc, int dr, int dc, int size)
//tr 棋盘中左上角方格所在行,tc 棋盘中左上角方格所在列,dr 特殊点的行下标,dc 特殊点的列下标size 棋阵的行数。
(2)、int main( );
算法分析:
void chessBoard(int tr, int tc, int dr, int dc, int size)
{
if (size==1)
return;
int t = tile++; // L型骨牌号
int s = size/2; // 分割棋盘
//________________________________________________ 覆盖左上角子棋盘
if (drtr+sdctc+s) // 特殊方格在此棋盘中
chessBoard(tr, tc, dr, dc, s);
else // 此棋盘中无特殊方格
{
board[tr+s-1][tc+s-1]=t; // 用 t 号L型骨牌覆盖右下角
chessBoard(tr,tc,tr+s-1, tc+s-1, s);// 覆盖其余方格
}
//________________________________________________ 覆盖右上角子棋盘
if (dr tr + s dc = tc + s) // 特殊方格在此棋盘中
chessBoard(tr, tc+s, dr, dc, s);
else // 此棋盘中无特殊方格
{
board[tr + s - 1][tc + s] = t; //用t号L型骨牌覆盖左下角
chessBoard(tr, tc+s, tr+s-1, tc+s, s);// 覆盖其余方格
}
//_______________________________________________ 覆盖左下角子棋盘
if (dr = tr + s dc tc + s) // 特殊方格在此棋盘中
chessBoard(tr+s, tc, dr, dc, s);
else // 此棋盘中无特殊方格
{
board[tr + s][tc + s - 1] = t; // 用 t 号L型骨牌覆盖右上角
chessBoard(tr+s, tc, tr+s, tc+s-1, s);// 覆盖其余方格
}
//__
文档评论(0)