[所有分類]八皇后問題課程設(shè)計(jì)論文_第1頁
[所有分類]八皇后問題課程設(shè)計(jì)論文_第2頁
[所有分類]八皇后問題課程設(shè)計(jì)論文_第3頁
[所有分類]八皇后問題課程設(shè)計(jì)論文_第4頁
[所有分類]八皇后問題課程設(shè)計(jì)論文_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、合肥學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告2009 2010 學(xué)年第 二 學(xué)期課程 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)名稱八皇后問題學(xué)生姓名殷偉峰學(xué)號(hào)0804012010專業(yè)班級(jí)08計(jì)科(2)指導(dǎo)教師王昆侖、張貫虹2010 年 06 月摘要:八皇后問題要求在一個(gè)的棋盤上放上個(gè)皇后,使得每一個(gè)皇后既攻擊不到另外七個(gè)皇后,也不被另外七個(gè)皇后所攻擊按照國際象棋的規(guī)則,一個(gè)皇后可以攻擊與之處在同一行或同一列或同一斜線上的其他任何棋子因此,八皇后問題等于要求八個(gè)皇后中的任意兩個(gè)不能被放在同一行或同一列或同一斜線上。 而本課程設(shè)計(jì)本人的目的也是通過用c+語言平臺(tái)將一個(gè)的棋盤上放上個(gè)皇后,使得每一個(gè)皇后既攻擊不到另外七個(gè)皇

2、后,也不被另外七個(gè)皇后所攻擊的92種結(jié)構(gòu)予以實(shí)現(xiàn) 使用回溯算法最終將其問題變得一目了然,更加易懂。關(guān)鍵詞: 八皇后 ; c+ ; 回溯法 目錄第一部分 課題綜述21.課題的來源及意義:22.任務(wù)要求:23.需求分析:2第二部分 課題分析21.目前狀況中的問題:32.問題分析:3第三部分 概要設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)41.算法描述:42.算法流程圖:6第四部分 詳細(xì)設(shè)計(jì)61.類的設(shè)計(jì):6第五部分 上機(jī)調(diào)試10第六部分 用戶使用說明11第七部分 測試結(jié)果及其分析11第八部分 參考文獻(xiàn)14第九部分 附錄15 第一部分 課題綜述:八皇后問題1.課題的來源及意義:八皇后問題是一個(gè)古老而著名的問題,是回溯

3、算法的典型例題。該問題是十九世紀(jì)著名的數(shù)學(xué)家高斯1850年提出。在國際象棋中,皇后是最有權(quán)利的一個(gè)棋子;只要?jiǎng)e的棋子在它的同一行或同一列或同一斜線(正斜線或反斜線)上時(shí),它就能把對方棋子吃掉。所以高斯提出了一個(gè)問題:在8*8的格的國際象棋上擺放八個(gè)皇后,使其不能相互攻擊,即任意兩個(gè)皇后都不能處于同一列、同一行、或同一條斜線上面,問共有多少種解法。到了現(xiàn)代,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,這一古老而有趣的數(shù)學(xué)游戲問題也自然而然的被搬到了計(jì)算機(jī)上。運(yùn)用所學(xué)計(jì)算機(jī)知識(shí)來試著解決這個(gè)問題是個(gè)鍛煉和提高我自己編程能力和獨(dú)立解決問題能力的好機(jī)會(huì),可以使我增強(qiáng)信心,為我以后的編程開個(gè)好頭,故我選擇了這個(gè)有趣的課題

4、。2.任務(wù)要求:設(shè)計(jì)程序解決八皇后問題,設(shè)計(jì)要求如下:n 依次輸出各種成功的放置方法;n 畫出棋盤的圖形界面,并在其上動(dòng)態(tài)地標(biāo)注行走的過程;n 程序能方便地移植到其他規(guī)格的棋盤上。 3.需求分析:本次課程設(shè)計(jì)中,用到的主要知識(shí)有:遞歸法的運(yùn)用,for語句的靈活運(yùn)用,數(shù)據(jù)結(jié)構(gòu)中樹知識(shí)的靈活運(yùn)用、數(shù)組及動(dòng)態(tài)數(shù)組技術(shù)的掌握。Ø 系統(tǒng)要求:win98以上操作系統(tǒng); Ø 語言平臺(tái):vc+6.0或以上版本;第二部分課題分析 :根據(jù)程序的設(shè)計(jì)要求,需要設(shè)計(jì)一個(gè)八皇后問題的演示程序,程序需要具備以下功能:n 能夠快速查找并顯示八皇后的布局方式有多少種正確方法;n 能夠逐個(gè)查看每種布局的結(jié)果

5、;n 能夠逐步演示棋子在棋盤上的的行走過程,直到出現(xiàn)正確的結(jié)果;n 能夠很方便的改變皇后個(gè)數(shù)即棋盤規(guī)格。1.目前狀況中的問題:要實(shí)現(xiàn)指定的功能,存在以下幾個(gè)待解決的問題;l 根據(jù)指定的規(guī)格,即皇后個(gè)數(shù),來畫出相應(yīng)規(guī)格的棋盤;l 能夠在指定的位置擺放棋子和收回棋子;l 制定落子的順序和規(guī)則,避免重復(fù)和遺漏;l 標(biāo)記每步落子后不能落子的區(qū)域,即已有棋子的同行、同列和同一斜線上的位置。2.問題分析:程序的功能要求具有圖形化界面,根據(jù)目前狀況中的問題,綜合考慮,在此使用MFC開發(fā)工具編程。l 關(guān)于棋盤的繪制,因?yàn)槠灞P的規(guī)格(n*n)是不確定的,顯然不能根據(jù)規(guī)格的大小來確定棋盤的面積,所以我們首先劃分出

6、一個(gè)指定區(qū)域,用來繪制棋盤,這個(gè)正方形區(qū)域的邊長大小為一個(gè)整型常量board,單位為像素,這樣就能輕易的計(jì)算出每個(gè)棋子格的大小,即我們自定義的單位長度,cell=board/n;在此有衍生出另外一個(gè)問題,board不可能被所有的n整除,這樣得到的cell可能會(huì)是一個(gè)無理數(shù),在C+語言中,處理浮點(diǎn)型數(shù)據(jù)時(shí)不能存儲(chǔ)無理數(shù),所以最好的方法是讓cell為一個(gè)整數(shù),這里使用一個(gè)技巧,board = board - board % n;這就將取整后的余數(shù)去掉了,在Dialog中,board%n是很小的區(qū)域,不會(huì)引起視覺沖突;l 關(guān)于棋子的擺放,在繪制完棋盤之后,我們同樣也獲取了每個(gè)棋子位的坐標(biāo),落子的過程

7、其實(shí)就是一個(gè)貼圖的過程,在指定坐標(biāo)的位置使用繪圖函數(shù)繪出棋子,同樣,取出棋子也是擦去棋子的圖形;l 程序在算法上使用回溯算法,即從第一行起逐行放置皇后,每放置一個(gè)皇后均需要對第1,2,8列進(jìn)行試探,并盡可能取小的列數(shù)。若當(dāng)前試探的列位置是安全的,則將該行i的列位置j保存在數(shù)組的queeni=j變量中,然后繼續(xù)在下一行尋找安全位置,若當(dāng)前試探的列位置不安全,則用下一列試探;當(dāng)8列位置試探完畢都未找到安全位置時(shí),就退?;厮莸缴弦恍?,修改最后一行保存的皇后位置,然后繼續(xù)試探。同時(shí)根據(jù)queeni的值擺放和去除棋子,queeni=j>0是,在(i,j)位置擺棋,queeni<0時(shí),清除該行

8、的棋子;l 關(guān)于“死區(qū)”的標(biāo)記。落子規(guī)則為逐行落子,那么就不存在兩個(gè)棋子同行的情況,我們只需要考慮是否同列和是否在同一斜線;觀察落子點(diǎn)的坐標(biāo),同一列的任意兩個(gè)位置坐標(biāo)(i1,j1)、(i2,j2),有j1 =j2 ,可以設(shè)置布爾型數(shù)組mkn來存儲(chǔ)標(biāo)記信息,當(dāng)mkj=true時(shí)j列為“死區(qū)”;在棋盤中的斜線,有左上右下和右上左下兩種,各有2n-1條,其中在同一左上右下斜線上的兩點(diǎn)(i1,j1)、(i2,j2),有這樣的特征,i1-i2=j1-j2,即i1+j1=i2+j2,可以設(shè)置標(biāo)記數(shù)組lk2n-1,lki+j=true表示該點(diǎn)所在坐上右下斜線為“死區(qū)”;同理,右上左下的斜線上的兩點(diǎn)坐標(biāo)有關(guān)系

9、:i1-j1=i2-j2,可以設(shè)置數(shù)組rk2n-1來標(biāo)記,當(dāng)lkn+i-j=true時(shí),表示當(dāng)前點(diǎn)所在右上左下斜線為“死區(qū)”。第三部分概要設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu) :根據(jù)問題分析提供的解決方案,實(shí)現(xiàn)棋盤繪制和棋子擺放清除功能,可以選擇的存儲(chǔ)結(jié)構(gòu)為線性存儲(chǔ)結(jié)構(gòu),邏輯結(jié)構(gòu)為圖形結(jié)構(gòu),并構(gòu)造一種新的數(shù)據(jù)結(jié)構(gòu)QueenPanel,定義在這個(gè)數(shù)據(jù)結(jié)構(gòu)上的功能有,按提供的規(guī)格繪制棋盤,按指定的位置繪制棋子和清除棋子。實(shí)現(xiàn)主窗口和棋子擺放規(guī)則,可以選用線性存數(shù)結(jié)構(gòu)和圖形邏輯結(jié)構(gòu)構(gòu)造一個(gè)新的數(shù)據(jù)結(jié)構(gòu),定義在其上的功能為根據(jù)回溯法的規(guī)則改變*queen中皇后位置,并將其傳遞給QueenPanel的對象,使其按要求實(shí)現(xiàn)棋子

10、的擺放,直到出現(xiàn)正確的放置方法。1.算法描述:A、 數(shù)據(jù)初始化。B、 從i行開始擺放第i個(gè)皇后(因?yàn)檫@樣便可以符合每一橫行只有一個(gè)皇后的要求),先測試當(dāng)前位置(i,j)是否等于false(未被占領(lǐng))。如果是,擺放第1個(gè)皇后,并宣布占領(lǐng)(豎列、斜列一起設(shè)置mkj=true、rkn+i-j=true、lki+j=true),記錄該皇后的位置queeni=j,并擺放棋子,接著進(jìn)行遞歸;如果不是,測試下一個(gè)位置(i,j+1),但是如果當(dāng)i<=8,m=8時(shí),發(fā)現(xiàn)此時(shí)已無法擺放時(shí),便要進(jìn)行回溯。從問題的某一種可能出發(fā),搜索從這種情況能出發(fā),繼續(xù)搜索,這種不斷“回溯”的尋找解的方法,稱為“回溯法”。C

11、、使用數(shù)組實(shí)現(xiàn)回溯法的思想。D、當(dāng)i=8,j>=8時(shí),結(jié)束。如圖1所示,從第1行開始,先將棋子擺在位置(1,1)上,然后依次每行的縱坐標(biāo)為3,5,2,4,在第5行之后,由圖2可以看出,已經(jīng)沒有地方可以繼續(xù)落子了,這個(gè)時(shí)候,就要開始回溯了,由圖3的樹形就夠可以看出,下面會(huì)取回第五行的棋子,并重新擺在8位置;依次下去,知道擺滿8個(gè)棋子;圖3顯示的是一次完整的走棋過程,得到一種正確的放置方法:(1,1),(2,5),(3,8),(4,6),(5,3),(6,7),(7,2),(8,4)。 圖1 棋子擺放順序示意圖 圖2 當(dāng)前棋盤狀態(tài)圖圖3 棋子擺放的樹形示意圖2.算法流程圖:回溯圖4 算法流程

12、圖第四部分詳細(xì)設(shè)計(jì) :1.類的設(shè)計(jì):class QueenPanel : public CStatic/ Constructionpublic:QueenPanel();QueenPanel(int size);/ Attributespublic:/ Operationspublic:/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(QueenPanel)/AFX_VIRTUAL/ Implementationpublic:virtual QueenPanel();void SetSize(in

13、t size);void SetQueen(int *newq);void SetQueen(int row, int col);/ Generated message map functionsprotected:/AFX_MSG(QueenPanel)afx_msg void OnPaint();/AFX_MSGDECLARE_MESSAGE_MAP()private:void DrawBoard(CDC *pDC, int size, int cell);int *queen; int n; HANDLE queen_mutex; ;class QueenPanel繼承自MFC標(biāo)準(zhǔn)類CS

14、tatic,CStatic類提供了一個(gè)Windows靜態(tài)控件的性能。一個(gè)靜態(tài)控件用來顯示一個(gè)文本字符串,框,矩形,圖標(biāo),光標(biāo),位圖,或增強(qiáng)的圖元文件。這里用來實(shí)現(xiàn)繪制棋盤的基礎(chǔ)。一個(gè)靜態(tài)控件不接收輸入,也不提供輸出;但是,如果它是用SS_NOTIFY風(fēng)格創(chuàng)建的,則它可以通知其父有關(guān)設(shè)備點(diǎn)擊的消息。衍生的成員變量n用來記錄皇后的個(gè)數(shù),因?yàn)閚不確定,這里使用動(dòng)態(tài)數(shù)組int *queen記錄皇后在每行的位置,成員函數(shù)DrawBoard(CDC *pDC, int size, int cell),用于繪制棋盤,OnPaint()用于按位置繪制棋子,輔助成員函數(shù)SetSize(int size)、Set

15、Queen(int *newq)、 SetQueen(int row, int col)等用于初始化相應(yīng)成員變量。class CEightQueenDlg : public CDialog/ Constructionpublic:void UpdateUI();CEightQueenDlg(CWnd* pParent = NULL);/ standard constructorvoid WINAPI Go();virtual void OnOK(); virtual void OnCancel();/ Dialog Data/AFX_DATA(CEightQueenDlg)enum IDD =

16、 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/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(

17、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 OnContinue();afx_msg void OnClose();afx_msg void OnStepBy();afx_msg void OnAbout();afx_msg

18、 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 DoPause();void WINAPI Step(int i);BOOLEAN m_step, m_no_int;int count; int n; int *qu

19、een; BOOLEAN *rk; BOOLEAN *lk;BOOLEAN *mk; BOOLEAN step, no_int; HANDLE pause_event, this_mutex;BOOLEAN canceling;BOOLEAN running; BOOLEAN pausing; ;class CEightQueenDlg繼承自類MFC的標(biāo)準(zhǔn)基類CDialog,CDialog類是在屏幕上顯示的對話框基類。CEightQueenDlg是本程序的對話框類,用于實(shí)現(xiàn)主對話框界面的實(shí)現(xiàn),包括棋盤的初始化,界面中各按鈕的功能,是程序的核心所在。成員變量*rk,*lk和*mk分別用與存儲(chǔ)右上

20、左下和左上右下斜線以及列中是否能夠填棋子的標(biāo)記,canceling、running、pausing分別用于存儲(chǔ)退出、開始、繼續(xù)按鈕是否被按下的標(biāo)記;n用于存儲(chǔ)皇后個(gè)數(shù),count用于存儲(chǔ)正確擺放結(jié)果的數(shù)目,*queen記錄每行的皇后位置;step、 no_int分別記錄暫停狀態(tài)和連續(xù)狀態(tài);m_step、m_no_int分別記錄暫停和連續(xù)鍵是否被按下; pause_event和this_mutex是兩個(gè)事件對象,用于多線程操作;afx_msg void OnSysCommand(UINT nID, LPARAM lParam)、 afx_msg void OnPaint()、afx_msg HC

21、URSOR OnQueryDragIcon()、afx_msg void OnStart()、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()為一組消息映射函數(shù),分別實(shí)現(xiàn)各按鈕功能。class CAboutDlg : public CDialogpublic:CAboutDlg

22、();/ 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 support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)virtual BOOL OnInitDialo

23、g();/AFX_MSGDECLARE_MESSAGE_MAP();Class CAboutDlg封裝了對話框類的所有信息,用于初始化呈現(xiàn)程序的介紹信息的對話框。2.E-R圖:*queenm_panelthis_mutex;m_stepcountno_intcancelingpause_eventCAboutDlgQueen_mutex*queennrunningpausingm_no_intstepn*rk*lk*mkm_hIconCEightQueenDlg屬于QueenPanel第五部分上機(jī)調(diào)試 :本程序在VC6.0和Visual Stdio 2008上編譯正確,調(diào)試通過,調(diào)試記錄如下(

24、顯示為Visual Stdio 2008上的調(diào)試記錄):第六部分用戶使用說明 :本程序界面設(shè)計(jì)簡易,設(shè)置有提示功能,使用時(shí),用戶首先在大小欄中填寫一個(gè)皇后規(guī)格大小,默認(rèn)為8皇后,再選擇是否要單步運(yùn)行,顯示棋子的移動(dòng)路徑,或者選擇連續(xù),自動(dòng)運(yùn)行,并顯示找個(gè)的正確放置方法的個(gè)數(shù);按開始鍵程序開始運(yùn)行,在此過程中,點(diǎn)擊暫??梢詴和?zhí)行,在此點(diǎn)擊暫??梢詥尾竭\(yùn)行,點(diǎn)擊繼續(xù)恢復(fù)執(zhí)行,在默認(rèn)狀態(tài)下運(yùn)行中點(diǎn)擊繼續(xù)會(huì)顯示下一種正確的放置結(jié)果,在運(yùn)行過程中退出,要先點(diǎn)擊停止,這是會(huì)停止所有運(yùn)行過程;第七部分測試結(jié)果及其分析:本程序在winXP系統(tǒng)測試正確,為發(fā)現(xiàn)bug。運(yùn)行結(jié)果如下:圖5 程序運(yùn)行界面圖6 任意

25、規(guī)格棋盤繪制示例圖7 顯示八皇后問題一種有92中放置方法圖8 其它幾種規(guī)格的皇后問題結(jié)果示例圖9 八皇后的幾種正確放置結(jié)果圖10 當(dāng)皇后大于51時(shí),棋盤不夠大了,顯示畫不下了第八部分參考文獻(xiàn) :1王昆侖等 數(shù)據(jù)結(jié)構(gòu)與算法中國鐵道出版社 2007年6月第一版;2鄭莉 等編著C+語言程序設(shè)計(jì)(第三版)北京: 清華大學(xué)出版社;3李春葆 等編著C+程序設(shè)計(jì)學(xué)習(xí)與上機(jī)實(shí)驗(yàn)指導(dǎo) 北京:清華大學(xué)出版社;4范輝 等編著Visual C+6.0程序設(shè)計(jì)簡明教程 高等教育出版社;5李龍澍C+程序設(shè)計(jì)實(shí)訓(xùn)教程北京:清華大學(xué)出版社;6洪國勝 等編著 C+ Builder程序設(shè)計(jì)輕松上手北京:清華大學(xué)出版社;7嚴(yán)蔚敏等

26、 數(shù)據(jù)結(jié)構(gòu)(c語言版) 北京:清華大學(xué)出版社,1997年4月第1版;8胡學(xué)鋼等數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)指導(dǎo)北京:清華大學(xué)出版社,1999年 第1版;9葛垚等 Visual C+ MFC棋牌類游戲編程實(shí)例人民郵電出版社,2008年7月第一版; 10 朱晴婷等 Visual C+程序設(shè)計(jì)基礎(chǔ)與實(shí)例分析清華大學(xué)出版社2004年3月第一版;11美Ben Ezzell著 廖俊等譯 windows 32位編程指南清華大學(xué)出版社,1996年11月第一版;12丁貴廣等 Visual C+6.0數(shù)字圖像編碼 機(jī)械工業(yè)出版社 2004年2月第一版;13何志丹著 深入淺出Visual C+入門、進(jìn)階與應(yīng)用實(shí)例人民郵電出版社

27、2007年4月第一版;第九部分附錄 :帶注釋的源代碼/ EightQueen.h : main header file for the EIGHTQUEEN application/#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

28、#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 CWinApppublic:CEightQueenApp();/ Overrides/ ClassWizard ge

29、nerated virtual function 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_MESSAG

30、E_MAP();/AFX_INSERT_LOCATION/ 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_F0AA7

31、C29A7BD_INCLUDED_)#define 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

32、();CEightQueenDlg(CWnd* pParent = NULL);/ 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(CEightQ

33、ueenDlg)protected:virtual void DoDataExchange(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_ms

34、g HCURSOR OnQueryDragIcon();afx_msg void OnStart();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 Thread

35、Go( LPVOID lpParam ) ;void UpdateQPanel(int *queen);void UpdateQPanel(int row, int col);void DoPause();void WINAPI Step(int i);BOOLEAN m_step, m_no_int;/分別記錄單步選項(xiàng)和連續(xù)選項(xiàng)int count;/記錄最終找到的正確布局?jǐn)?shù)目int n;/皇后個(gè)數(shù)int *queen;/記錄皇后的位置,queeni表示第i行皇后的所在列的位置。BOOLEAN *rk;/右上斜行BOOLEAN *lk;/左上斜行BOOLEAN *mk;/列BOOLEAN st

36、ep, no_int;/分別記錄暫停狀態(tài)和連續(xù)狀態(tài)/兩個(gè)事件對象HANDLE pause_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_B7

37、0B_F0AA7C29A7BD_INCLUDED_)#if !defined(AFX_QUEENPANEL_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

38、 : public CStatic/ Constructionpublic:QueenPanel();QueenPanel(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);v

39、oid SetQueen(int row, int col);/ Generated message map functionsprotected:/AFX_MSG(QueenPanel)afx_msg void OnPaint();/聲明Onpaint函數(shù)消息映射/AFX_MSGDECLARE_MESSAGE_MAP()private:void DrawBoard(CDC *pDC, int size, int cell);int *queen;/記錄皇后在每行的位置,因?yàn)閭€(gè)數(shù)不定,用動(dòng)態(tài)數(shù)組int n;/皇后個(gè)數(shù)HANDLE queen_mutex;/創(chuàng)建互斥對象的句柄,用來計(jì)時(shí);/AFX

40、_INSERT_LOCATION/ Microsoft Visual C+ will insert additional 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_ABO

41、UTBOX 0x0010#define IDD_ABOUTBOX 100#define IDS_ABOUTBOX 101#define IDD_EIGHTQUEEN_DIALOG 102#define IDR_MAINFRAME 128#define IDB_BITMAP_BACK 129#define IDB_BEIJING 132#define IDI_ICON1 133#define IDC_QUEEN_PANEL 1005#define IDC_START 1007#define IDC_PAUSE 1008#define IDC_CONTINUE 1009#define IDC_ST

42、OP 1010#define IDC_ABOUT 1011#define IDC_STEP_BY 1012#define IDC_NO_INT 1014#define IDC_COPY_RIGHT 1018#define IDC_BOARD_SIZE 1019#define IDC_BJ 1020/ Next default values for new objects/ #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 134#define _APS_NEXT_CO

43、MMAND_VALUE 32771#define _APS_NEXT_CONTROL_VALUE 1021#define _APS_NEXT_SYMED_VALUE 101#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_

44、C7625339E8C8_INCLUDED_)#define AFX_STDAFX_H_8A5FE61E_7DB5_46B8_9DB4_C7625339E8C8_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000#define VC_EXTRALEAN/ Exclude rarely-used stuff from Windows headers#include <afxwin.h> / MFC core and standard components#include <afxext.h

45、> / MFC extensions#include <afxdisp.h> / MFC Automation classes#include <afxdtctl.h>/ MFC support for Internet Explorer 4 Common Controls#ifndef _AFX_NO_AFXCMN_SUPPORT#include <afxcmn.h>/ MFC support for Windows Common Controls#endif / _AFX_NO_AFXCMN_SUPPORT/AFX_INSERT_LOCATION/

46、 Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_STDAFX_H_8A5FE61E_7DB5_46B8_9DB4_C7625339E8C8_INCLUDED_)/ EightQueen.cpp : Defines the class behaviors for the application./#include "stdafx.h"#include "EightQueen.h&quo

47、t;#include "EightQueenDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CEightQueenAppBEGIN_MESSAGE_MAP(CEightQueenApp, CWinApp)/AFX_MSG_MAP(CEightQueenApp)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you s

48、ee in these blocks of generated code!/AFX_MSGON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()/ CEightQueenApp constructionCEightQueenApp:CEightQueenApp()/ TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CEightQueenApp objectCEightQueenApp

49、 theApp;/ CEightQueenApp initializationBOOL CEightQueenApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce 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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論