- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机与信息学院
数据结构
课程设计报告
专 业 班 级 计算机科学与技术07—4班 学生姓名及学号 邵贤军 课程教学班号 002班 任 课 教 师 胡学钢 张晶 实验指导教师 胡学钢 张晶 实验地点 寝室
2008 ~2009 学年第 二 学期 课程设计题目及要求:
一、课程设计题目及要求∶
课题22. 在中国象棋棋盘上,如果在若干个马后,使得整个棋盘的任意空位置的棋子都能被这些马吃掉,则称这组放置为一个满覆盖,若去掉满覆盖中的任意一颗棋子都会使得这组放置不是满覆盖,则称这一覆盖为最小满覆盖,设计程序完成一下要求:
要求:
(1) 求解一个极小满覆盖
(2) 最好能画出棋盘的图形形式,并在其上动态演示试探过程
(3) 程序能方便的移植到其他规格的棋盘上
二、实验环境和仪器设备∶
计算机一台及Microsoft Visual C++6.0\Dev C++ 三、相关资料和参考文献(教材和实验指导书以外)∶
网站论坛上的一些资料 四、课程设计思路:
该题的求解要用到深度搜索算法
用MFC对程序进行美化
总体思路:首先获得一张覆盖满棋子的棋盘,然后任取一个非最小满覆盖,对该非最小满覆盖进行处理。
具体过程:
1.获得一个非最小满覆盖
这一步要求不高,只需要随便找一个非最小满覆盖进行初始化即可。
2. 对棋盘进行处理。具体的函数见下:
(1).Select(int x,int y,int count,NODE EatNum[])函数——对棋子进行处理
Count = —1;
对棋盘上的每一颗棋子进行处理,获得一个棋子数据,对棋子处理的方法是这样的,首先选定一颗要处理的棋子,然后对八个方向的棋子进行判断,得到一个数组EatNum[],该数组存放的是能吃到所处理的棋子的棋子,每处理一个棋子,若该棋子可以吃到所处理的棋子,存入数组,并将count加1
如此处理下图所示的1,2,3,4,5,6,7,8八个位置的棋子。
比如若1号位置有棋子且C位置没有棋子,则将1号位棋子存放到EatNum[]里,count++;
该函数执行后即可获得处理位置的信息,以便以后对该点进行删除马的操作。
2.MoveHorse(int x, int y)函数——删除马
函数主要功能是对每一个马进行处理,这里要用到Select(int x,int y,int count,NODE EatNum[])函数,由它处理后的数据对MoveHorse(int x, int y)有很重要的作用,首先函数MoveHorse(int x, int y)判断count的值,这里分为三种情况进行讨论:1,当count==-1的时候,这时说明该点没有马能吃到,显然这点的马不能拿到,否则将出现空位不能被踏到的危险,此时对另一个数组DelHorse[][]进行赋值为false; 2.当count==0的时候,这时说明这一点的马可以拿掉,但是要注意能吃到这一点的马却不能被删除掉,这时要设该点的DelHorse[][]为false; 3.当count0的时候,这时说明有很多点都能吃到这一点,这时我们对不能拿掉的点进行分离,若存在能拿掉的点,则在EatNum[]删除这一点的信息,另外,设一bool型标识量mark,初始值为false,若存在为false的点,则mark为true,接下来若mark为真的话,说明存在一定可以吃到这一点的马,并且那个马还是一直存在的,这时我们只要对剩下的马做MoveHorse()的操作了,假如mark不为真,这时我们取数组顶的那一点作为吃到这一点的固定马,即将DelHorse[][]设为false,接下来寻找经过Movehorse()处理后还存在的马,若存在,则将标记的那一点的马设为true;
具体流程见下图
3.主函数对函数的调用:
(1)初始化棋盘;
(2)利用一个9 x 10的循环对棋盘处理,先调用Select()函数,然后调用MoveHorse()函数;
(3)输出棋盘;
具体流程见下图:
五、实验结果(截图)∶
程序开始时的主界面:
棋盘初始状态:
得到的最小覆盖:
六、相关核心代码
#includeiostream
#includewindows.h
#includestdlib.h
using namespace std;
#define col 9
#define lin 10
class NODE{
public:
int x;
int y;
};
int Board[col][lin];
bool DelHorse[col][lin];
void Select(int i,int j,int count,NODE EatNum[8]
您可能关注的文档
最近下载
- 面向2025年商业银行的金融科技人才金融科技产品运营能力培养策略.docx
- 【50页PPT】数据治理平台与数据运营体系建设方案.pptx VIP
- E5071B网络分析仪指导书.pdf VIP
- 汽车售后经理年终总结.pptx VIP
- 操作考核标准:简易呼吸气囊.pdf VIP
- 高标准基本农田建设项目竣工验收报告.docx VIP
- 人力资源控制程序.doc VIP
- 2020年美工理论题库4.docx VIP
- 国标图集05s502图集阀门井-国家建筑标准设计图集电子版下载 1.docx VIP
- 第2讲 一心跟着共产党(第一课时)没有共产党就没有新中国(课件)-《学生读本(小学低年级)》.pptx VIP
文档评论(0)