八皇后问题课程设计论文_第1页
八皇后问题课程设计论文_第2页
八皇后问题课程设计论文_第3页
八皇后问题课程设计论文_第4页
八皇后问题课程设计论文_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、合肥学院计算机科学与技术系课程设计报告20092010学年第 二 学期课程数据结构与算法课程设计名称八皇后问题学生姓名殷伟峰学号0804012010专业班级08计科(2)指导教师王昆仑、张贯虹2010 年06月摘要:八皇后问题要求在一个88的棋盘上放上8个皇后,使得每一个皇后既攻击不到另外七个 皇后,也不被另外七个皇后所攻击.按照国际象棋的规则,一个皇后可以攻击与之处在同一行或 同一列或同一斜线上的其他任何棋子.因此,八皇后问题等于要求八个皇后中的任意两个不能被 放在同一行或同一列或同一斜线上。而本课程设计本人的目的也是通过用C+语言平台将一个8大8的棋盘上放上8个皇后,使 得每一个皇后既攻击

2、不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现.使 用回溯算法最终将其问题变得一目了然,更加易懂。关键词:八皇后;C+ ;回溯法目录 TOC o 1-5 h z 第一部分课题综述5 HYPERLINK l bookmark17 o Current Document 课题的来源及意义:5 HYPERLINK l bookmark21 o Current Document 任务要求:5 HYPERLINK l bookmark28 o Current Document 需求分析:5第二部分课题分析5 HYPERLINK l bookmark41 o Current Document

3、 目前状况中的问题:6 HYPERLINK l bookmark45 o Current Document 问题分析:6 HYPERLINK l bookmark49 o Current Document 第三部分概要设计和数据结构7 HYPERLINK l bookmark52 o Current Document 算法描述:7 HYPERLINK l bookmark60 o Current Document 算法流程图:9第四部分详细设计9 HYPERLINK l bookmark67 o Current Document 1.类的设计:9第五部分上机调试13第六部分用户使用说明14 H

4、YPERLINK l bookmark76 o Current Document 第七部分测试结果及其分析14第八部分参考文献17第九部分附录18第一部分课题综述:八皇后问题课题的来源及意义:八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是 十九世纪著名的数学家高斯1850年提出。在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行 或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以 高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互 攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共 有多少种解法。到了现代,

5、随着计算机技术的飞速发展,这一古老而有趣的数学游戏问题 也自然而然的被搬到了计算机上。运用所学计算机知识来试着解决这个问题是 个锻炼和提高我自己编程能力和独立解决问题能力的好机会,可以使我增强信 心,为我以后的编程开个好头,故我选择了这个有趣的课题。任务要求:设计程序解决八皇后问题,设计要求如下:依次输出各种成功的放置方法;画出棋盘的图形界面,并在其上动态地标注行走的过程;程序能方便地移植到其他规格的棋盘上。需求分析:本次课程设计中,用到的主要知识有:递归法的运用,for语句的灵活运用,数据结构中树知识的灵活运用、数组及动态数组技术的掌握。系统要求:win98以上操作系统;语言平台:vc+6.

6、0或以上版本;第二部分课题分析:根据程序的设计要求,需要设计一个八皇后问题的演示程序,程序需要具 备以下功能:能够快速查找并显示八皇后的布局方式有多少种正确方法;能够逐个查看每种布局的结果;能够逐步演示棋子在棋盘上的的行走过程,直到出现正确的结果;能够很方便的改变皇后个数即棋盘规格。目前状况中的问题:要实现指定的功能,存在以下几个待解决的问题;根据指定的规格,即皇后个数,来画出相应规格的棋盘;能够在指定的位置摆放棋子和收回棋子;+制定落子的顺序和规则,避免重复和遗漏;标记每步落子后不能落子的区域,即已有棋子的同行、同列和同一斜 线上的位置。问题分析:程序的功能要求具有图形化界面,根据目前状况中

7、的问题,综合考虑,在 此使用MFC开发工具编程。-关于棋盘的绘制,因为棋盘的规格(n*n)是不确定的,显然不能根 据规格的大小来确定棋盘的面积,所以我们首先划分出一个指定区 域,用来绘制棋盘,这个正方形区域的边长大小为一个整型常量 board,单位为像素,这样就能轻易的计算出每个棋子格的大小,即 我们自定义的单位长度,cell=board/n;在此有衍生出另外一个问题, board不可能被所有的n整除,这样得到的cell可能会是一个无理数, 在C+语言中,处理浮点型数据时不能存储无理数,所以最好的方法 是让cell为一个整数,这里使用一个技巧,board = board - board % n

8、;这就将取整后的余数去掉了,在Dialog中,board%n是很小的区 域,不会引起视觉冲突;-关于棋子的摆放,在绘制完棋盘之后,我们同样也获取了每个棋子位 的坐标,落子的过程其实就是一个贴图的过程,在指定坐标的位置使 用绘图函数绘出棋子,同样,取出棋子也是擦去棋子的图形;-程序在算法上使用回溯算法,即从第一行起逐行放置皇后,每放置一 个皇后均需要对第1,2,,8列进行试探,并尽可能取小的列数。 若当前试探的列位置是安全的,则将该行i的列位置j保存在数组的 queeni=j变量中,然后继续在下一行寻找安全位置,若当前试探的 列位置不安全,则用下一列试探;当8列位置试探完毕都未找到安全 位置时,

9、就退栈回溯到上一行,修改最后一行保存的皇后位置,然后 继续试探。同时根据queeni的值摆放和去除棋子,queeni=j0是, 在(i,j)位置摆棋,queeni0时,清除该行的棋子;-关于“死区”的标记。落子规则为逐行落子,那么就不存在两个棋子 同行的情况,我们只需要考虑是否同列和是否在同一斜线;观察落子 点的坐标,同一列的任意两个位置坐标(板)、(i2,j2),有j1 =j2, 可以设置布尔型数组mkn来存储标记信息,当mkj=true时j列为“死区”;在棋盘中的斜线,有左上右下和右上左下两种,各有2n-1 条,其中在同一左上右下斜线上的两点(ipj】)、(i2,j2),有这样的特 征,i

10、1-i2=j1-j2,即 i1+j1=i2+j2,可以设置标记数组 lk2n-1,lki+j=true 表示该点所在坐上右下斜线为“死区”;同理,右上左下的斜线上的 两点坐标有关系:i1-j1=i2-j2,可以设置数组rk2n-1来标记,当 lkn+i-j=true时,表示当前点所在右上左下斜线为“死区”。第三部分概要设计和数据结构:根据问题分析提供的解决方案,实现棋盘绘制和棋子摆放清除功能,可以 选择的存储结构为线性存储结构,逻辑结构为图形结构,并构造一种新的数据 结构QueenPanel,定义在这个数据结构上的功能有,按提供的规格绘制棋盘, 按指定的位置绘制棋子和清除棋子。实现主窗口和棋子

11、摆放规则,可以选用线性存数结构和图形逻辑结构构造 一个新的数据结构,定义在其上的功能为根据回溯法的规则改变*queen中皇后 位置,并将其传递给QueenPanel的对象,使其按要求实现棋子的摆放,直到 出现正确的放置方法。算法描述:A、数据初始化。B、从i行开始摆放第i个皇后(因为这样便可以符合每一横行只有一个皇 后的要求),先测试当前位置(i,j)是否等于false (未被占领)。如果是,摆 放第1个皇后,并宣布占领(竖列、斜列一起设置mkj=true、rkn+i-j=true、 lki+j=true),记录该皇后的位置queeni=j,并摆放棋子,接着进行递归; 如果不是,测试下一个位置

12、(i,j+1),但是如果当i=8 时,结束。如图1所示,从第1行开始,先将棋子摆在位置(1,1)上,然后依次每行 的纵坐标为3, 5, 2, 4,在第5行之后,由图2可以看出,已经没有地方可以 继续落子了,这个时候,就要开始回溯了,由图3的树形就够可以看出,下面 会取回第五行的棋子,并重新摆在8位置;依次下去,知道摆满8个棋子;图 3显示的是一次完整的走棋过程,得到一种正确的放置方法:(1,1),(2, 5), (3, 8),(4,6),(5, 3),(6, 7),(7,2),(8, 4)。图1棋子摆放顺序示意图图2当前棋盘状态图0333503233103 OSOM)1311 i/ii I i

13、i/uii I iiaiB 4i5isi5) (zlZISOOSD 1) 5)4)4 图3棋子摆放的树形示意图算法流程图:图4算法流程图第四部分详细设计1.类的设计:class QueenPanel : public CStatic (/ Constructionpublic:QueenPanel();QueenPanel(int size);/ Attributes public:/ Operationspublic:/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(QueenPanel)/AF

14、X_VIRTUAL/ Implementationpublic:virtual QueenPanel();void SetSize(int size);void SetQueen(int *newq);void SetQueen(int row, int col);/ Generated message map functions protected:/AFX_MSG(QueenPanel) afx_msg void OnPaint();/AFX_MSGDECLARE_MESSAGE_MAP()private:void DrawBoard(CDC *pDC, int size, int cel

15、l);int *queen;int n;HANDLE queen_mutex;class QueenPanel 继承自 MFC 标准类 CStatic, CStatic 类提供了一个 Windows静态控件的性能。一个静态控件用来显示一个文本字符串,框,矩形, 图标,光标,位图,或增强的图元文件。这里用来实现绘制棋盘的基础。一个 静态控件不接收输入,也不提供输出;但是,如果它是用SS_NOTIFY风格创建 的,则它可以通知其父有关设备点击的消息。衍生的成员变量n用来记录皇后 的个数,因为n不确定,这里使用动态数组int *queen记录皇后在每行的位置, 成员函数 DrawBoard(CDC

16、*pDC, int size, int cel),用于绘制棋盘,OnPaint() 用于按位置绘制棋子,辅助成员函数SetSize(int size)、SetQueen(int *newq)、 SetQueen(int row, int col)等用于初始化相应成员变量。class CEightQueenDlg : public CDialog / Constructionpublic:void UpdateUI();CEightQueenDlg(CWnd* pParent = NULL); / standard constructor void WINAPI Go();virtual voi

17、d OnOK();virtual void OnCancel();/ Dialog Data/AFX_DATA(CEightQueenDlg)enum IDD = IDD_EIGHTQUEEN_DIALOG ;QueenPanel m_panel;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CEightQueenDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL

18、/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CEightQueenDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnStart();afx_msg void OnPause();afx_msg void OnContin

19、ue();afx_msg void OnClose();afx_msg void OnStepBy();afx_msg void OnAbout();afx_msg void OnStop();afx_msg void OnAuto();afx_msg void OnNoInt();/AFX_MSGDECLARE_MESSAGE_MAP()private:static DWORD WINAPI ThreadGo( LPVOID lpParam );void UpdateQPanel(int *queen);void UpdateQPanel(int row, int col);void DoP

20、ause();void WINAPI Step(int i);BOOLEAN m_step, m_no_int;int count;int n;int *queen;BOOLEAN *rk;BOOLEAN *lk;BOOLEAN *mk;BOOLEAN step, no_int;HANDLE pause_event, this_mutex;BOOLEAN canceling;BOOLEAN running;BOOLEAN pausing;);class CEightQueenDlg 继承自类 MFC 的标准基类 CDialog, CDialog 类是在 屏幕上显示的对话框基类。CEightQu

21、eenDlg是本程序的对话框类,用于实现主 对话框界面的实现,包括棋盘的初始化,界面中各按钮的功能,是程序的核心 所在。成员变量*rk,*lk和*mk分别用与存储右上左下和左上右下斜线以及列 中是否能够填棋子的标记,canceling、running、pausing分别用于存储退出、 开始、继续按钮是否被按下的标记;n用于存储皇后个数,count用于存储正确 摆放结果的数目,*queen记录每行的皇后位置;step、no_int分别记录暂停 状态和连续状态;m_step、m_no_int分别记录暂停和连续键是否被按下; pause_event和this_mutex是两个事件对象,用于多线程操作

22、;afx_msg void OnSysCommand(UINT nID, LPARAM lParam)、afx_msg void OnPaint()、 afx_msg HCURSOR OnQueryDragIcon()、afx_msg void OnStart()、afx_msg void OnPause()、afx_msg void OnContinue()、afx_msg void OnClose()、afx_msg void OnStepByQ afx_msg void OnAbout。afx_msg void OnStop()、afx_msg void OnAuto()、afx_msg

23、 void OnNoInt()为一组消息映射 函数,分别实现各按钮功能。class CAboutDlg : public CDialog(public:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/)AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV su

24、pport /AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)virtual BOOL OnInitDialog();/AFX_MSGDECLARE_MESSAGE_MAP() );Class CAboutDlg封装了对话框类的所有信息,用于初始化呈现程序的介绍 信息的对话框。2.E-R 图:第五部分上机调试:本程序在VC6.0和Visual Stdio 2008上编译正确,调试通过,调试记录如下:显示为VisualStdio 2008上的调试记录):显示输出来源(分:生成,#由等;W1正在涟接.1正在嵌入清单.1正在创建浏览信息

25、文件.1 i cro soft浏1览信息届护实用工具Vers ion 9. 00. 210221 X:pjTi ght 匚 Misoft C:rporation. All rights reserved.1生成 日 恚保存在 fi 1 丁 : /,c: : III 口 huiti ent e and 导11 i ng:,Adrri i ni s at 口上 桌面 L匚 Eibh-ZD 1 口. E. 2 Il RbugAEui 1 dLu g:. htm lEihtQueeiL - 0个错误1个警告=生成:成功1个,失败口个,最新口个,跳过0个=第六部分用户使用说明:本程序界面设计简易,设置有

26、提示功能,使用时,用户首先在大小栏中填写一个皇后规格大 小,默认为8皇后,再选择是否要单步运行,显示棋子的移动路径,或者选择连续,自动运行, 并显示找个的正确放置方法的个数;按开始键程序开始运行,在此过程中,点击暂停可以暂停执 行,在此点击暂停可以单步运行,点击继续恢复执行,在默认状态下运行中点击继续会显示下一 种正确的放置结果,在运行过程中退出,要先点击停止,这是会停止所有运行过程;第七部分测试结果及其分析:本程序在winXP系统测试正确,为发现bug。运行结果如下:图5程序运行界面控制_大小:厂厂单步 r开始皙停/单步继续About.图6任意规格棋盘绘制示例图7显示八皇后问题一种有92中放

27、置方法N八皇后图8其它几种规格的皇后问题结果示例U八皇后u人皇后图9八皇后的几种正确放置结果JR研控制大小:|52厂单圻 厂连续开始太大,画不下了!暂停/单圻I继续|停止 |About.图10当皇后大于51时,棋盘不够大了,显示画不下了第八部分参考文献:.王昆仑等数据结构与算法中国铁道出版社2007年6月第一版;.郑莉等编著C+语言程序设计(第三版)北京:清华大学出版社;.李春葆等编著C+程序设计学习与上机实验指导北京:清华大学出版社;.范辉等编著Visual C+6.0程序设计简明教程高等教育出版社;.李龙澍C+程序设计实训教程北京:清华大学出版社;.洪国胜等编著C+ Builder程序设计

28、轻松上手北京:清华大学出版社;.严蔚敏等数据结构(c语言版)北京:清华大学出版社,1997年4月第1版;.胡学钢等数据结构算法设计指导北京:清华大学出版社,1999年 第1版;.葛垚等Visual C+ MFC棋牌类游戏编程实例人民邮电出版社,2008年7月第一版;.朱晴婷等Visual C+程序设计一一基础与实例分析清华大学出版社2004年3月第 一版;.美Ben Ezzell著廖俊等译windows 32位编程指南清华大学出版社,1996年11月 第一版;. 丁贵广等Visual C+6.0数字图像编码机械工业出版社2004年2月第一版;.何志丹著深入浅出Visual。+入门、进阶与应用实

29、例人民邮电出版社2007年4月第 一版;第九部分附寸录:带注释的源代码/ EightQueen.h : main header file for the EIGHTQUEEN ap plication/#if !defined(AFX_EIGHTQUEEN_H_AC8B37C1_189E_4854_93A1_6E05AE2F6665_INCLUDED_)#define AFX_EIGHTQUEEN_H_AC8B37C1_189E_4854_93A1_6E05AE2F6665_INCLUDED_#if _MSC_VER 1000#pragma once#endif/ _MSC_VER 1000#

30、ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include resource.h / main symbols/ CEightQueenApp:/ See EightQueen.cpp for the implementation of this class/class CEightQueenApp : public CWinApp(public:CEightQueenApp();/ Overrides/ ClassWizard generated virtual funct

31、ion overrides/AFX_VIRTUAL(CEightQueenApp)public:virtual BOOL InitInstance();/AFX_VIRTUAL/ Implementation/AFX_MSG(CEightQueenApp)/ NOTE - the ClassWizard will add and remove member functions here./ DO NOT EDIT what you see in these blocks of generated code !/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_L

32、OCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif/ !defined(AFX_EIGHTQUEEN_H_AC8B37C1_189E_4854_93A1_6E05AE2F6665_INCLUDED_)/ EightQueenDlg.h : header file/#if !defined(AFX_EIGHTQUEENDLG_H_EE09858D_8174_463A_B70B_F0AA7C29A7BD_INCLUDED_) #def

33、ine AFX_EIGHTQUEENDLG_H_EE09858D_8174_463A_B70B_F0AA7C29A7BD_INCLUDED_#include QueenPanel.h / Added by ClassView#if _MSC_VER 1000#pragma once#endif/ _MSC_VER 1000/ CEightQueenDlg dialogclass CEightQueenDlg : public CDialog(/ Constructionpublic:void UpdateUI();CEightQueenDlg(CWnd* pParent = NULL); /

34、standard constructorvoid WINAPI Go();virtual void OnOK();virtual void OnCancel();/ Dialog Data/AFX_DATA(CEightQueenDlg)enum IDD = IDD_EIGHTQUEEN_DIALOG ;QueenPanelm_panel; 棋盘类对象/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CEightQueenDlg)protected:virtual void DoDataExchang

35、e(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CEightQueenDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void O

36、nStart();afx_msg void OnPause();afx_msg void OnContinue();afx_msg void OnClose();afx_msg void OnStepBy();afx_msg void OnAbout();afx_msg void OnStop();afx_msg void OnAuto();afx_msg void OnNoInt();/)AFX_MSGDECLARE_MESSAGE_MAP()private:static DWORD WINAPI ThreadGo( LPVOID lpParam );void UpdateQPanel(in

37、t *queen);void UpdateQPanel(int row, int col);void DoPause();void WINAPI Step(int i);BOOLEAN m_step, m_no_int;/分别记录单步选项和连续选项int count;/记录最终找到的正确布局数目int n;/皇后个数int *queen;/记录皇后的位置,queeni表示第i行皇后的所在列的位置。BOOLEAN *rk;/右上斜行BOOLEAN *lk; 左上斜行BOOLEAN *mk;/列BOOLEAN step, no_int;/分别记录暂停状态和连续状态两个事件对象HANDLE paus

38、e_event, this_mutex;BOOLEAN canceling;BOOLEAN running; 记录开始按钮被按下BOOLEAN pausing;/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif/ !defined(AFX_EIGHTQUEENDLG_H_EE09858D_8174_463A_B70B_F0AA7C29A7BD_INCLUDED_)#if !defined(AFX_QUEE

39、NPANEL_H_A9B8D66C_5C62_445A_8FF1_F10F757293C3_INCLUDED_)#define AFX_QUEENPANEL_H_A9B8D66C_5C62_445A_8FF1_F10F757293C3_INCLUDED_#if _MSC_VER 1000#pragma once#endif/ _MSC_VER 1000/ QueenPanel.h : header file/ QueenPanel windowclass QueenPanel : public CStatic/ Constructionpublic:QueenPanel();QueenPane

40、l(int size);/ Attributespublic:/ Operationspublic:/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(QueenPanel)/AFX_VIRTUAL/ Implementationpublic:virtual QueenPanel();void SetSize(int size);void SetQueen(int *newq);void SetQueen(int row, int col);/ Generated message map funct

41、ions protected:/AFX_MSG(QueenPanel)afx_msg void OnPaint(); /声明Onpaint函数消息映射/AFX_MSGDECLARE_MESSAGE_MAP()private:void DrawBoard(CDC *pDC, int size, int cell);int *queen; 记录皇后在每行的位置,因为个数不定,用动态数组int n;/皇后个数HANDLE queen_mutex; 创建互斥对象的句柄,用来计时;/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert addition

42、al declarations immediately before the previous line.#endif/ !defined(AFX_QUEENPANEL_H_A9B8D66C_5C62_445A_8FF1_F10F757293C3_INCLUDED_)/NO_DEPENDENCIES/ Microsoft Developer Studio generated include file./ Used by EightQueen.rc/#define IDM_ABOUTBOX0 x0010 TOC o 1-5 h z #define IDD_ABOUTBOX100#define I

43、DS_ABOUTBOX101#define IDD_EIGHTQUEEN_DIALOG102#define IDR_MAINFRAME128#define IDB_BITMAP_BACK129#define IDB_BEIJING132#define IDI_ICON1133#define IDC_QUEEN_PANEL1005#define IDC_START1007#define IDC_PAUSE1008#define IDC_CONTINUE1009#define IDC_STOP1010#define IDC_ABOUT1011#define IDC_STEP_BY1012#defi

44、ne IDC_NO_INT1014#define IDC_COPY_RIGHT1018#define IDC_BOARD_SIZE1019#define IDC_BJ1020 / Next default values for new objects/#ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS TOC o 1-5 h z #define _APS_NEXT_RESOURCE_VALUE134#define _APS_NEXT_COMMAND_VALUE32771#define _APS_NEXT_CONTROL_VALUE1

45、021#define _APS_NEXT_SYMED_VALUE101#endif#endif/ stdafx.h : include file for standard system include files,/ or project specific include files that are used frequently, but/ are changed infrequently/ #if !defined(AFX_STDAFX_H_8A5FE61E_7DB5_46B8_9DB4_C7625339E8C8_INCLUDED_) #define AFX_STDAFX_H_8A5FE

46、61E_7DB5_46B8_9DB4_C7625339E8C8_INCLUDED.#if _MSC_VER 1000 #pragma once#endif/ _MSC_VER 1000#define VC_EXTRALEAN#include #include #include #include / Exclude rarely-used stuff from Windows headers/ MFC core and standard components/ MFC extensions/ MFC Automation classes/ MFC support for Internet Exp

47、lorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT#include / MFC support for Windows Common Controls#endif/ _AFX_NO_AFXCMN_SUPPORT/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif/ !defined(AFX_STDAFX_H_8A5FE61E_7DB5_46B8_9D

48、B4_C7625339E8C8_INCLUDED_)/ EightQueen.cpp : Defines the class behaviors for the application./#include stdafx.h #include EightQueen.h#include EightQueenDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CEightQueenAppBEGIN_MESSAGE_MAP(CEightQueenApp, CWinAp

49、p)/AFX_MSG_MAP(CEightQueenApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blocks of generated code!/)AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CEightQueenApp constructionCEightQueenApp:CEightQueenApp()/ TODO: add constructio

50、n code here,/ Place all significant initialization in InitInstance/ The one and only CEightQueenApp object CEightQueenApp theApp;/ CEightQueenApp initializationBOOL CEightQueenA pp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to re

51、duce the size/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic(); / Call this when linking to MFC statically #endifCEightQueenDl

52、g dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK)/ TODO: Place code here to handle when the dialog is/ dismissed with OK)else if (nResponse = IDCANCEL)(/ TODO: Place code here to handle when the dialog is/ dismissed with Cancel)/ Since the dialog has been closed, return FAL

53、SE so that we exit the/ application, rather than start the applications message pump.return FALSE;)/ EightQueenDlg.cpp : implementation file/#include stdafx.h#include EightQueen.h#include EightQueenDlg.h#include QueenPanel.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _F

54、ILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog(public:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/)AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);

55、/ DDX/DDV support /AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg) virtual BOOL OnInitDialog(); /)AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/A

56、FX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CEightQueenDlg dialogCEightQueenDlg:CEightQueenDlg(CWnd* pParent /*=NULL*/):CDialog(CEightQueenDlg:IDD, pParent) /默认/AFX_DATA_INIT(CEightQueenDlg)/AFX_DATA_INIT/ Note that Lo

57、adIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetA pp()-LoadIcon(IDR_MAINFRAME);void CEightQueenDlg:DoDataExchange(CDataExchange* pDX) /默认CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CEightQueenDlg)DDX_Control(pDX, IDC_QUEEN_PANEL, m_panel);/)AFX_DATA_MAP )消息映射BEGIN_MESSAGE_MAP

58、(CEightQueenDlg, CDialog)/AFX_MSG_MAP(CEightQueenDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_START, OnStart)ON_BN_CLICKED(IDC_PAUSE, OnPause)ON_BN_CLICKED(IDC_CONTINUE, OnContinue)ON_WM_CLOSE()ON_BN_CLICKED(IDC_STEP_BY, OnStepBy)ON_BN_CLICKED(IDC_ABOUT, OnAbout)ON_BN_CL

59、ICKED(IDC_STOP, OnStop)ON_BN_CLICKED(IDC_NO_INT, OnNoInt)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CEightQueenDlg message handlersBOOL CEightQueenDlg:OnInitDialog() /默认CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0 xFFF0)

60、= IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX A ppendMenu(MF_SEPARATOR);pSysMenu-A ppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论