ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:516.24KB ,
资源ID:16179292      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16179292.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《八皇后演示软件》设计文档Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《八皇后演示软件》设计文档Word文档格式.docx

1、1.3 定义专门术语原文涵义queen皇后flag标示count计数FindQueenFind queen找皇后OutAlgorithmOut algorithm输入算法2 任务概述2.1 需求分析在初始状态下在国际象棋上没有任何棋子。然后顺序在第1行,第2行,第8行上布放棋子。在每一行中有8个可选择位置,但在任一时刻,棋盘的合法布局都必须满足3个限制条件:即任何两个棋子不得放在棋盘上的同一行、或者同一列、或者同一斜线上。用回溯法。在第n行第j列安放一个棋子时,需要记录在行方向、列方向、正斜线方向、反斜线方向的安放状态,若当前布局合法,可向下一行递规求解,否则可移走这个棋子,回复安放此棋子前的

2、状态,试探本行的j1列。2.2 概要设计首先定义一个递归找全部解的递归函数FindQueen(int i),设有一个参数i, 表示在1至i-1行都已有皇后合理放置的情况下,寻找第i行的合理放置。在i行上,有8种可能的放置,列j顺次选择第1列、第2列直至第8列。当i行j列的放置是合理的时候,就设置与i行j列相对应的列、斜线有皇后的标志并输出皇后,并在i=7(i从0开始计算)的情况下,看皇后位置是否合适,合适则弹出对话框,并把标记flag置为1;否则递归调用FindQueen(i+1),在第i+1行上寻找合理的放置。一列试探结束,再试探下一列之前,清除已设置的与i行j列相对应的列、斜线有皇后的标志

3、,让j增加1,在下一列寻找解。要关心的是一个皇后是否已经合理的沿着每一行、每一列的斜线安置。因此在每一列上恰好安置一个皇后,引入一个数组queen,queeni 记录第i行皇后的列的位置j。另外,为了使程序在检查皇后放置的合理性方面简易方便,引入以下三个工作数组(k仅代表其中一个元素): 数组mk ,mkk=1表示第k列上有皇后; 数组lk ,lkk=1表示第k条主对角线上有皇后; 数组rk ,rkk=1表示第k条反对角线上有皇后;棋盘中的行与列有如下规律:同一条主对角线上的方格,它们的行号与列号之间的关系:i-j+7均相等;同一条反对角线上的方格,它们的行号与列号之间的关系:i+j均相等。初

4、始化时,所有行和斜线上均没有皇后。在第i行的j列方格放置一个合理的皇后后,准备考察第i+1行时,应在数组mk ,lk ,rk 中为第i行、第j列的方格设定有皇后的标志;如果前次的皇后放置导致后面的放置无论如何都不能满足要求,则回溯,重置,这时,应先清除原先在数组mk ,lk ,rk 中设置的关于第i行、第j列有皇后的标志;一个皇后在第i行、第j列方格内放置是合理的,由数组mk ,lk ,rk 对应位置都没有皇后来确定。2.3 运行环境本程序在Microsoft Visual Studio 2008环境下写成,可直接通过EXE文件直接运行。3 需求3.1 功能需求功能类别功能类型名称、标识符描述

5、八皇后类保护成员queen8queeni 表示第i行皇后的列的位置保护成员flag用来做标记保护成员mk8,rk15,lk15;用于存放判断皇后位置后变量存放公有成员函数C八皇后View()用于构造八皇后视图函数并初始化公有成员函数CBrush my_brush 构造一个矩形画刷,将一个Bit图背景刷到框里公有成员函数FindQueen(int i)通过算法为八皇后定位公有成员函数Onput(int queen)找到皇后位置后输出皇后公有成员函数OnDraw(CDC* pDC)显示棋盘在窗口中,并重写以绘制该视图公有成员函数afx_msg void OnFileNew()建立一个响应,通过点击

6、开始键实现摆皇后启动3.2 性能需求3.2.1 数据精确度【说明对该软件的输入、输出数据精度的要求,可能包括传输过程中的精度。如无此要求,可省略。】3.2.2 时间特性要求【说明对于该软件的时间特性要求,如对响应时间、更新处理时间、数据的转换和传送时间、解题时间等的要求。说明软件支持的终端数和应支持的并行操作的用户数。4 总体设计4.1 基本设计概念和处理流程4.11 FindQueen()流程图 4.12 Onput()流程图5 类设计class C八皇后View : public CViewprotected: / 仅从序列化创建 C八皇后View();public: / 属性 C八皇后D

7、oc* GetDocument() const; int queen8,flag;/queeni 表示第i行皇后的列的位置 int mk8,rk15,lk15;/标记 CBrush my_brush;/笔刷 int count;/计数private: CFont m_newfont,*m_oldfont;/字体对象/ 操作 void FindQueen(int i);/查找皇后位置 void Onput(int queen);/输入皇后 void OutAlgorithm(CDC* pDC);/输出算法/ 重写 virtual void OnDraw(CDC* pDC); / 重写以绘制该视图

8、/ 实现 virtual C八皇后View();/ 生成的消息映射函数 afx_msg void On32771();/开始,在窗口单击以实现查找皇后;6 数据结构设计6.1 逻辑结构设计类图: 八皇后# CFont m_newfont,*m_oldfont;+ int queen8,flag,count;/queeni 表示第i行皇后的列位置+ int mk8,rk15,lk15;+ C八皇后Doc* GetDocument() const;/构造函数+ virtual C八皇后View();/析构函数+ CBrush my_brush;/构造刷子+ void FindQueen(int i

9、);+ void Onput(int queen);/输出皇后+ virtual void OnDraw(CDC* pDC);+ afx_msg void On32771();6.1.1表汇总模块名称功能说明构造函数为函数初始化析构函数释放数据,空间查找皇后函数通过算法查找出皇后位置输出皇后函数在相应皇后位置输入皇后重绘实现棋盘和算法的重绘视图消息处理函数通过单击窗口中相应按钮实现启动摆皇后7 模块设计7.1构造函数 C八皇后View()功能描述初始化queen,count,flag,笔刷接口与属性数据结构与算法C八皇后View:C八皇后View() CBitmap bmp; bmp.Load

10、MappedBitmap(IDB_BITMAP1); my_brush.CreatePatternBrush(&bmp); count=0; int i; flag=0; for(i=0;iSendMessage(WM_CLOSE);/结束项目7.3查找皇后FindQueen(int i)通过递归查找全部解的算法查找皇后位置传入0值开始重头开始查找FindQueen(int i) for(int j=0; jStretchBlt(i+1)*60,1*60,60,60,&deMemory,0,0,60,60,SRCCOPY); elseStretchBlt(i+1)*60,(queeni+1)*

11、60,60,60,& deMemory.SelectObject(poldBitmap);7.5重写绘制视图OnDraw()重写以绘制该视图,输出背景图和棋盘传入CDC* pDCOnDraw(CDC* pDC) C八皇后Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return;/刷背景图 CRect rect; GetClientRect(rect);/取得客户区域 pDC- FillRect(rect,&my_brush); /用背景画刷填充区域/ 画棋盘 CBrush brush1; brush1.CreateSoli

12、dBrush(RGB(0,0,0);/黑色画笔 CBrush brush2; brush2.CreateSolidBrush(RGB(200,200,200);/灰色画笔 for(int i=1;9; for(int j=1; j+) CRect rc(i*60,j*60,i*60+60,j*60+60); if(i+j)%2=0)FillRect(rc,&brush1);brush2);/在窗口中显示算法 m_oldfont = pDC -SelectObject(&m_newfont);TextOut(580,50,_T(算法:),strlen(SelectObject(m_oldfont

13、);TextOut(580,70,_T(void FindQueen (int i) TextOut(580,90,_T(for (int j = 0; j 8; j+) TextOut(580,110,_T(mkj&!rki+j&lk7+i-j) /判断是否符合放入皇后的条件TextOut(580,130,_T(queeni = j; /记录第i行皇后的列的位置j TextOut(580,150,_T(rki + j = TRUE; /记录从右上到左下的斜线上有皇后 /记录从右上到左下的斜线上有皇后TextOut(580,170,_T(mkj = TRUE; /记录第j列有皇后TextOut

14、(580,190,_T(lk8-1+i-j = TRUE; /记录从左上到右下的斜线上有皇后TextOut(580,210,_T(if (i = 7) if (i = 7)TextOut(580,230,_T(OnPut(); /输出摆放的方法 /输出摆放的方法TextOut(580,250,_T(elseTextOut(580,270,_T(FindQueen(i + 1);/递归调用TextOut(580,290,_T(queeni = -1; TextOut(580,310,_T(rki + j = FALSE;TextOut(580,330,_T(lki + 8 - 1 - j = F

15、ALSE;TextOut(580,350,_T(mkj = FALSE;TextOut(580,370,_T( TextOut(580,390,_T(TextOut(580,410,_T(7 接口设计7.1 外部接口单击窗口中的开始键,使棋子摆放开始。7.2 内部接口1. 通过消息处理程序开始整个程序,先调用FindQueen();2. FindQueen()在算法中调用Onput()实现皇后摆放;3. Onput()中又调用OnDraw()实现棋盘重绘;4. 在FindQueen()不断递归调用,最终将所有结果找出。8 使用说明8.1 安装与初始化【一步一步地说明为使用本软件而需要进行的安装与初始化过程,包括程序的存载形式,安装与初始化过程中的全部操作命令,系统对这些命令的反应与答复,表征安装工作完成的测试实例等。如果有的话,还应说明安装过程中所需用到的专用软件。8.2 软件主要功能的使用说明【对软件主要功能的操作和输入输出做简要的说明】9 设计小结通过本次课程设计,我运用到了很多C+课本中的知识,特别是此次实训强调的类的运用。使我们慢慢培养面向对象的设计思想,并且学习了Microsoft Visual Studio 2008中MFC可视化的常规运用,是我们在实践中慢慢积累经验。程序采用可视化界面,易于操作,对于用户可以可选择行进行操作。10 测试用例

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1