下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本文格式為word版,下載可任意編輯傳教士和野人問(wèn)題實(shí)驗(yàn)報(bào)告 1.上機(jī)內(nèi)容 傳教士與野人問(wèn)題求解(寬度搜尋算法) 二 二 問(wèn)題背景: 從前有一條河,河的左岸有 m 個(gè)傳教士(missionary)和 m 個(gè)野人(cannibal),和一艘最多可乘 n 人的小船。商定左岸,右岸和船上或者沒(méi)有傳教士,或者野人數(shù)量少于傳教士,否則野人會(huì)把傳教士吃掉。 三 三 試驗(yàn)內(nèi)容: 編程,接收 m 和 n,搜尋一條可讓全部的野人和傳教士平安渡到右岸的方案,例如下圖: (m 表示傳教士(missionary),c 表示野人(cannibal)) 初 態(tài) 目 標(biāo) left bank river right bank
2、 left bank river right bank m. m. c. c. 注:本試驗(yàn)的舉例均以 3 個(gè)傳教士和 3 個(gè)野人同在左岸作為初始狀態(tài)。 四 四 試驗(yàn)方案和算法: 1 數(shù)據(jù)結(jié)構(gòu): 本試驗(yàn)需要用到的數(shù)據(jù)結(jié)構(gòu)主要是隊(duì)列和堆棧,其實(shí)現(xiàn)均包含于 dso.h 頭文件中,分別命名為 class stack 和 class queue。 2 2 寬 度搜尋算法: (1) 結(jié)點(diǎn)結(jié)構(gòu) : class move public: int missionary; /要移動(dòng)的傳教士數(shù)量 int cannibal; /野人 ; class elemtype : move /繼承 move 類,獲得傳教士,野
3、人數(shù)據(jù)成員。 private: bool boat; /船是否在左岸? public: elemtype* flag; / 標(biāo)示前一狀態(tài)即擴(kuò)展出本結(jié)點(diǎn)的父結(jié)點(diǎn)信息 elemtype(int max_people) /創(chuàng)建初始狀態(tài) missionary = cannibal = max_people; boat = true; flag = null; 在這里,elemtype 集成了 move,從而獲得 move 類的傳教士和野人數(shù)據(jù)成員。以上兩個(gè)類的數(shù)據(jù)成員用于保存全部擴(kuò)展生成的結(jié)點(diǎn)。其中 missionary 表示表示左岸上傳教士的樹(shù)目,cannibal 表示左岸上野人的樹(shù)目,boat 表
4、示船在哪個(gè)岸上(其中 true 表示在左岸,這是船的初始狀態(tài),表示 false 在右岸), flag用于標(biāo)示前一狀態(tài)即擴(kuò)展出本結(jié)點(diǎn)的父結(jié)點(diǎn)信息,以便最終回搜找出解的 路徑。 舉例說(shuō)明:假設(shè)左岸有 3 個(gè)傳教士和 3 個(gè)野人,小船最多可乘 2 人。把當(dāng)前左岸的狀態(tài)抽象為:(3,3,1),前兩個(gè)3代表左岸有 3 個(gè)傳教士和 3 個(gè)野人,1 代表船在左岸。很明顯,目標(biāo)狀態(tài)為(0,0,0),表示左岸的傳教士和也人數(shù)目都是 0,而船在右岸。 (2) 船的行動(dòng)規(guī)章( successor function ): : 把每一次可行的渡船方案作為行動(dòng)規(guī)章,用 move 類的(m,c)表示。行動(dòng)規(guī)章的兩位數(shù)分別代
5、表要移動(dòng)的傳教士,野人的數(shù)量。對(duì)于固定大小的船,其裝載力量是肯定的,所以它的行動(dòng)規(guī)章空間也是肯定的。在這里,用 movegroup 類的構(gòu)造函數(shù)構(gòu)造出全部的行動(dòng)規(guī)章。 留意,這里 movegroup 類中的 move 對(duì)象只有 500 的可用空間,所以,輸入的傳教士和野人數(shù)目構(gòu)成的行動(dòng)規(guī)章不能超過(guò) 500 種。 (3) 寬度優(yōu)先算法: 試驗(yàn)的主要搜尋算法由 answer 類的構(gòu)造函數(shù)實(shí)現(xiàn),這里主要用到了 open 和 closed 隊(duì)列,以及一個(gè)臨時(shí)的 temp 堆棧。其中,open 表用于存放擴(kuò)展結(jié)點(diǎn),closed 表用于存放被擴(kuò)展結(jié)點(diǎn),temp 則用于用于記錄勝利搜尋的路徑。 搜尋過(guò)程大致
6、如下描述:先構(gòu)造初始結(jié)點(diǎn)以及船的行動(dòng)規(guī)章,初始結(jié)點(diǎn)入 open 隊(duì)列,以寬度優(yōu)先依次搜尋 open 隊(duì)列頭結(jié)點(diǎn)的子結(jié)點(diǎn),同時(shí)保存受訪問(wèn)結(jié)點(diǎn)的父結(jié)點(diǎn)信息,知道搜尋到目標(biāo)結(jié)點(diǎn)或者無(wú)解為止。 算法框圖如下所示: 開(kāi)頭 初始接結(jié)點(diǎn)并入 open 隊(duì)列 open 為空? open 隊(duì)列頭結(jié)點(diǎn) n 出列,并入 closed 隊(duì)列 返回 y n 3 程序界面 和功能 說(shuō)明: 程序運(yùn)行環(huán)境為 dos 掌握臺(tái),運(yùn)行開(kāi)頭以后,程序提示輸入需要坐船的傳教士和野人數(shù)目,例如輸入 3 表示有 3 個(gè)傳教士和 3 個(gè)野人。 用戶按回車鍵以后,程序連續(xù)提示輸入船的裝載力量,例如輸入 2 表示這個(gè)船依次最多可以坐 2 人。注
7、:一般狀況下,船的裝載力量應(yīng)當(dāng)少于傳教士或野人的數(shù)量,而且一般為偶數(shù)。 程序 開(kāi)頭運(yùn)行時(shí)的 界面截圖: 程序 運(yùn)行結(jié)束時(shí)的 界面截圖: 把結(jié)點(diǎn)的子結(jié)點(diǎn)并入 open隊(duì)列,保存父結(jié)點(diǎn) 被擴(kuò)展結(jié)點(diǎn)還有子結(jié)點(diǎn)嗎? 返回 y n 輸出文件示例: left(3, 3) | (0, 0)right step 1 move 0 missionaries and 2 cannibals to the right side. left(3, 1) | (0, 2)right step 2 move 0 missionaries and 1 cannibals to the left side. left(3,
8、2) | (0, 1)right step 3 move 0 missionaries and 2 cannibals to the right side. left(3, 0) | (0, 3)right step 4 move 0 missionaries and 1 cannibals to the left side. left(3, 1) | (0, 2)right step 5 move 2 missionaries and 0 cannibals to the right side. left(1, 1) | (2, 2)right step 6 move 1 missionar
9、ies and 1 cannibals to the left side. left(2, 2) | (1, 1)right step 7 move 2 missionaries and 0 cannibals to the right side. left(0, 2) | (3, 1)right step 8 move 0 missionaries and 1 cannibals to the left side. left(0, 3) | (3, 0)right step 9 move 0 missionaries and 2 cannibals to the right side. le
10、ft(0, 1) | (3, 2)right step 10 move 0 missionaries and 1 cannibals to the left side. left(0, 2) | (3, 1)right step 11 move 0 missionaries and 2 cannibals to the right side. left(0, 0) | (3, 3)right ok! 5 錯(cuò)誤說(shuō)明: (1) 關(guān)于有沒(méi)有解的問(wèn)題:由于傳教士和野人問(wèn)題是一個(gè)真實(shí)的問(wèn)題,來(lái)到岸邊的傳教士和野人數(shù)目與船的裝載力量都是隨機(jī)的,所以某些特定狀況下,要以肯定規(guī)章把人都運(yùn)到船的對(duì)岸是沒(méi)有解的,例如假設(shè)有 10 個(gè)傳教士和 10 個(gè)野人,船一次最多能夠裝 2 人,這時(shí)候是不能把人都運(yùn)到對(duì)岸的,這時(shí)候程序會(huì)提示:there may not be any way to transport these guys. (2) 關(guān)于運(yùn)行時(shí)間的問(wèn)題:本試驗(yàn)使用寬度優(yōu)先搜尋算法,但并沒(méi)有進(jìn)行優(yōu)化,所以有時(shí)候程序雖然的確有解,但是由于算法的效率的確很低,造成的時(shí)間上的開(kāi)銷有時(shí)候可能會(huì)比起喝一杯咖啡的時(shí)間還要長(zhǎng),這時(shí)候程序會(huì)提示: please wait patiently。working . . . 六 六 心得體會(huì): 這個(gè)是我們小組的第一個(gè)試驗(yàn),由于閱歷以及力量有限,所以算法上
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色環(huán)保農(nóng)機(jī)租賃合同示范文本資訊4篇
- 2025年度定制門窗產(chǎn)品研發(fā)與施工安裝合同4篇
- 二零二四年度中央空調(diào)水泵安裝與維護(hù)合同3篇
- 二零二五年度門窗玻璃更換與安全檢測(cè)專項(xiàng)合同4篇
- 2025年度個(gè)人二手車交易合同(二手車市場(chǎng)推廣合作版)4篇
- 2025年度民營(yíng)醫(yī)院特殊崗位勞動(dòng)合同規(guī)范樣本4篇
- 2025版建筑裝修抹灰工程分包合同模板4篇
- 2025年成華區(qū)房產(chǎn)銷售無(wú)責(zé)底薪合同變更協(xié)議4篇
- 二零二五年度農(nóng)業(yè)產(chǎn)業(yè)鏈延伸與拓展承包合同范本3篇
- 二零二五版降水工程風(fēng)險(xiǎn)評(píng)估與應(yīng)對(duì)合同3篇
- 設(shè)備管理績(jī)效考核細(xì)則
- 中國(guó)人民銀行清算總中心直屬企業(yè)2023年招聘筆試上岸歷年典型考題與考點(diǎn)剖析附帶答案詳解
- (正式版)SJT 11449-2024 集中空調(diào)電子計(jì)費(fèi)信息系統(tǒng)工程技術(shù)規(guī)范
- 廣州綠色金融發(fā)展現(xiàn)狀及對(duì)策的研究
- 人教版四年級(jí)上冊(cè)加減乘除四則混合運(yùn)算300題及答案
- 合成生物學(xué)技術(shù)在生物制藥中的應(yīng)用
- 消化系統(tǒng)疾病的負(fù)性情緒與心理護(hù)理
- 高考語(yǔ)文文學(xué)類閱讀分類訓(xùn)練:戲劇類(含答案)
- 協(xié)會(huì)監(jiān)事會(huì)工作報(bào)告大全(12篇)
- WS-T 813-2023 手術(shù)部位標(biāo)識(shí)標(biāo)準(zhǔn)
- 同意更改小孩名字協(xié)議書(shū)
評(píng)論
0/150
提交評(píng)論