北郵信通院數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)二__八皇后問題實(shí)驗(yàn)報告(內(nèi)附源代碼完整版)_第1頁
北郵信通院數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)二__八皇后問題實(shí)驗(yàn)報告(內(nèi)附源代碼完整版)_第2頁
北郵信通院數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)二__八皇后問題實(shí)驗(yàn)報告(內(nèi)附源代碼完整版)_第3頁
北郵信通院數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)二__八皇后問題實(shí)驗(yàn)報告(內(nèi)附源代碼完整版)_第4頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告實(shí)驗(yàn)名稱 : 實(shí)驗(yàn)二 八皇后問題學(xué)生姓名 :班級:班內(nèi)序號 :學(xué)號:日期: 2014年11月27日1實(shí)驗(yàn)要求【實(shí)驗(yàn)?zāi)康?】進(jìn)一步掌握指針、模板類 、異常處理的使用掌握棧的操作的實(shí)現(xiàn)方法掌握隊(duì)列的操作的實(shí)現(xiàn)方法學(xué)習(xí)使用棧解決實(shí)際問題的能力學(xué)習(xí)使用隊(duì)列解決實(shí)際問題的能力【實(shí)驗(yàn)內(nèi)容 】利用棧結(jié)構(gòu)實(shí)現(xiàn)八皇后問題。八皇后問題19 世紀(jì)著名的數(shù)學(xué)家高斯于1850 年提出的 。 他的問題是 :在 8*8 的棋盤上放置8 個皇后 ,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列 、同一斜線上 。 請?jiān)O(shè)計(jì)算法打印所有可能的擺放方法。提示 :1、可以使用遞歸或非遞歸兩種方法實(shí)現(xiàn)2、實(shí)現(xiàn)

2、一個關(guān)鍵算法:判斷任意兩個皇后是否在同一行、同一列和同一斜線上2. 程序分析.專業(yè) .專注.2.1 存儲結(jié)構(gòu)存儲結(jié)構(gòu) :棧(遞歸)2.2 關(guān)鍵算法分析遞歸調(diào)用擺放皇后1、關(guān)鍵算法偽代碼:( 1 ) .如果輸入的 row 大于皇后的數(shù)量 ,則輸出皇后的位置( 2 ) 否則 col 從 0 開始遞增(3)檢測 ( row , col )上的點(diǎn)是否符合條件,不符合則col 自增 ,符合則轉(zhuǎn)到下一個皇后的排列2、代碼詳細(xì)分析:void SeqStack:PlaceQueen(int row)/ 擺放皇后.專業(yè) .專注.for (int col=0;col n;col+)/ 遍歷 07 ,Push(co

3、l);if (Check()/ 判斷擺放皇后的位置是否合適if (row n-1)/ 若還沒有放到最后一個,則進(jìn)行下一個皇后的放置PlaceQueen(row+1);elsenum+;/ 計(jì)數(shù)器加1Print(n);/ 打印成功的坐標(biāo)點(diǎn)Pop();/ 若不符合條件則出棧3、計(jì)算時間復(fù)雜度: O(n2) 判斷皇后位置是否合適:1、 關(guān)鍵算法偽代碼:.專業(yè) .專注.對于一個坐標(biāo) ,將前面每一個坐標(biāo)均與這個坐標(biāo)比較若在同一列或在同一斜線上,則返回 0,否則 j 自增 1 ,面每一個坐標(biāo)與前面做比較若與前面坐標(biāo)在同一列最后返回2、 代碼分析 :bool SeqStack:Check()for(inti

4、=0;itop;i+)/ 依次檢查前面已擺放的皇后位置if(datatop=datai|(abs(datatop-datai)=(top-i)/ 判斷是否在同一列同一斜線return false;return true;3、 時間復(fù)雜度 : O(n)2.3 其他說明 :由于輸出顯示時對話框有限,而程序結(jié)果比較多,占用空間大,運(yùn)用輸出坐標(biāo)位置來表示 ,則可以輸出全部解。3. 程序運(yùn)行結(jié)果( 1)程序框圖 :.專業(yè) .專注.開始輸入 nY判斷是否滿行輸出結(jié)果N判斷位置 qrowNcol+是否符合要求Yqrow=colrow+(2)程序代碼 :#include using namespace std

5、;const int m=1024;/ 定義棧的最大高度int num=0;/ 初始化方案種類計(jì)數(shù)器int n;/ 擺放的皇后個數(shù)class SeqStack/ 定義.專業(yè) .專注.順序棧public:SeqStack()top=-1;/ 構(gòu)造函數(shù),初始化空棧void Push(int x);/ 入棧void Pop();/ 出棧void PlaceQueen(int row);/ 擺放皇后的遞歸函數(shù)boolCheck();/ 判斷是否在同一行同一列同一斜線void Print(int n);/ 打印以坐標(biāo)的形式bool Empty();/ 判別棧是否為空private:int datam;/

6、 定義數(shù)組int top;/ 棧頂指針;void SeqStack:Push(int x)/ 入棧操作.專業(yè) .專注.if(top= m-1) throw 上溢 ;top+;/ 棧頂指針上移datatop=x;void SeqStack:Pop()/ 出棧操作if(Empty() throw 下溢 ;top-;/ 棧頂指針下移void SeqStack:PlaceQueen(int row)/ 擺放皇后for (int col=0;col n;col+)/ 遍歷 07 ,Push(col);if (Check()/ 判斷擺放皇.專業(yè) .專注.后的位置是否合適if(rown-1)/ 若還沒有放到

7、最后一個 ,則進(jìn)行下一個皇后的放置PlaceQueen(row+1);elsenum+;/ 計(jì)數(shù)器加 1Print(n);/ 打印成功的坐標(biāo)點(diǎn)Pop();/ 若不符合條件則出棧bool SeqStack:Empty()if(top=-1)return true;.專業(yè) .專注.elsereturn false;bool SeqStack:Check()for(inti=0;itop;i+)/ 依次檢查前面已擺放的皇后位置if(datatop=datai|(abs(datatop-datai)=(top-i)/ 判斷是否在同一列同一斜線return false;return true;void

8、SeqStack:Print(int n)/ 將棧的數(shù)組形式打印成坐標(biāo)int i;for(i=1;i=n;i+)cout(i,datai-1+1);coutendl;.專業(yè) .專注.void main() cout0 )n;if(n1024)cout 輸入錯誤 endl;SeqStack Queen;/ 定義類的對象Queen.PlaceQueen(0);/ 從棧底開始賦值coutQueen可能的擺放位置種類:numendl;/ 輸出擺放方法的總數(shù)( 3)運(yùn)行結(jié)果 :.專業(yè) .專注.專業(yè) .專注.專業(yè) .專注.4. 總結(jié)調(diào)試時出現(xiàn)的問題: 最初由于遞歸的思想未能很好掌握,導(dǎo)致幾次調(diào)試都出現(xiàn)比較嚴(yán)重的錯誤 ;且在運(yùn)用該方法時,未能將八皇后問題的具體思路搞清,沒有考慮 “如果前次的皇后放置錯誤導(dǎo)致后面的放置無論如何都不能滿足要求,在設(shè)計(jì)遞歸算法總是只顯示幾種,為了將 92 種情形全部打印,采用坐標(biāo)的形式。使用了棧的存儲結(jié)構(gòu)來存儲位置的縱坐標(biāo),不符合時將其出棧,要注意棧是否為空。總結(jié) :這次實(shí)驗(yàn)讓我更好地掌

溫馨提示

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

最新文檔

評論

0/150

提交評論