




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上1.上機(jī)內(nèi)容傳教士與野人問(wèn)題求解(寬度搜索算法)二 問(wèn)題背景:從前有一條河,河的左岸有m個(gè)傳教士(Missionary)和m個(gè)野人(Cannibal),和一艘最多可乘n人的小船。約定左岸,右岸和船上或者沒(méi)有傳教士,或者野人數(shù)量少于傳教士,否則野人會(huì)把傳教士吃掉。三 實(shí)驗(yàn)內(nèi)容:編程,接收m和n,搜索一條可讓所有的野人和傳教士安全渡到右岸的方案,例如下圖:(M表示傳教士(Missionary),C 表示野人(Cannibal))初態(tài)目標(biāo)LeftBankRiverRightbankLeftBankRiverRightbankM.M.C.C.注:本實(shí)驗(yàn)的舉例均以3個(gè)傳教士和3
2、個(gè)野人同在左岸作為初始狀態(tài)。四 實(shí)驗(yàn)方案和算法: 1數(shù)據(jù)結(jié)構(gòu): 本實(shí)驗(yàn)需要用到的數(shù)據(jù)結(jié)構(gòu)主要是隊(duì)列和堆棧,其實(shí)現(xiàn)均包含于dso.h頭文件中,分別命名為class stack和class queue。2寬度搜索算法:(1)結(jié)點(diǎn)結(jié)構(gòu):class Move public: int missionary; /要移動(dòng)的傳教士數(shù)量 int cannibal; /野人;class ElemTyp
3、e : Move /繼承Move類(lèi),獲得傳教士,野人數(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)
4、0; missionary = cannibal = MAX_PEOPLE; boat = true; flag = NULL;在這里,Elemtype集成了Move,從而獲得Move類(lèi)的傳教士和野人數(shù)據(jù)成員。以上兩個(gè)類(lèi)的數(shù)據(jù)成員用于保存所有擴(kuò)展生成的結(jié)點(diǎn)。其中missionary表示表示左岸上傳教士的樹(shù)目,cannibal表示左岸上野人的樹(shù)目,boat表示船在哪個(gè)岸上(其中true表示在左岸
5、,這是船的初始狀態(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類(lèi)的(m,c)表示。行動(dòng)規(guī)則的兩位數(shù)分別代表要移動(dòng)的傳教士,野人的數(shù)量。對(duì)于固定大小的船,其裝載能力是一定的,
6、所以它的行動(dòng)規(guī)則空間也是一定的。在這里,用MoveGroup類(lèi)的構(gòu)造函數(shù)構(gòu)造出所有的行動(dòng)規(guī)則。 注意,這里MoveGroup類(lèi)中的Move對(duì)象只有500的可用空間,所以,輸入的傳教士和野人數(shù)目構(gòu)成的行動(dòng)規(guī)則不能超過(guò)500種。(3)寬度優(yōu)先算法:實(shí)驗(yàn)的主要搜索算法由ANSWER類(lèi)的構(gòu)造函數(shù)實(shí)現(xiàn),這里主要用到了OPEN和CLOSED隊(duì)列,以及一個(gè)臨時(shí)的TEMP堆棧。其中,OPEN表用于存放擴(kuò)展結(jié)點(diǎn),CLOSED表用于存放被擴(kuò)展結(jié)點(diǎn),TEMP則用于用于記錄成功搜索的路徑。搜索過(guò)程大致如下描述:先構(gòu)造初始結(jié)點(diǎn)以及船的行動(dòng)規(guī)則,初始結(jié)點(diǎn)入OPEN隊(duì)列,以寬度優(yōu)先依次搜索OPEN隊(duì)列頭結(jié)點(diǎn)的子結(jié)點(diǎn),同時(shí)保
7、存受訪問(wèn)結(jié)點(diǎn)的父結(jié)點(diǎn)信息,知道搜索到目標(biāo)結(jié)點(diǎn)或者無(wú)解為止。算法框圖如下所示: 開(kāi)始初始接結(jié)點(diǎn)并入OPEN隊(duì)列Y返回OPEN為空?NOPEN隊(duì)列頭結(jié)點(diǎn)n出列,并入CLOSED隊(duì)列把結(jié)點(diǎn)的子結(jié)點(diǎn)并入OPEN隊(duì)列,保存父結(jié)點(diǎn)Y被擴(kuò)展結(jié)點(diǎn)還有子結(jié)點(diǎn)嗎?N返回3 程序界面和功能說(shuō)明:程序運(yùn)行環(huán)境為DOS控制臺(tái),運(yùn)行開(kāi)始以后,程序提示輸入需要坐船的傳教士和野人數(shù)目,例如輸入3表示有3個(gè)傳教士和3個(gè)野人。 用戶按回車(chē)鍵以后,程序繼續(xù)提示輸入船的裝載能力,例如輸入2表示這個(gè)船依次最多可以坐2人。注:一般情況下,船的裝載能力應(yīng)該少于傳教士或野人的數(shù)量,而且一般為偶數(shù)。程序開(kāi)始運(yùn)行時(shí)的界面截圖:程序運(yùn)行結(jié)束時(shí)的界
8、面截圖:輸出文件示例:Left(3, 3) | (0, 0)RightStep 1Move 0 missionaries and 2 cannibals to the right side.Left(3, 1) | (0, 2)RightStep 2Move 0 missionaries and 1 cannibals to the left side.Left(3, 2) | (0, 1)RightStep 3Move 0 missionaries and 2 cannibals to the right side.Left(3, 0) | (0, 3)RightStep 4Move 0 m
9、issionaries and 1 cannibals to the left side.Left(3, 1) | (0, 2)RightStep 5Move 2 missionaries and 0 cannibals to the right side.Left(1, 1) | (2, 2)RightStep 6Move 1 missionaries and 1 cannibals to the left side.Left(2, 2) | (1, 1)RightStep 7Move 2 missionaries and 0 cannibals to the right side.Left
10、(0, 2) | (3, 1)RightStep 8Move 0 missionaries and 1 cannibals to the left side.Left(0, 3) | (3, 0)RightStep 9Move 0 missionaries and 2 cannibals to the right side.Left(0, 1) | (3, 2)RightStep 10Move 0 missionaries and 1 cannibals to the left side.Left(0, 2) | (3, 1)RightStep 11Move 0 missionaries an
11、d 2 cannibals to the right side.Left(0, 0) | (3, 3)RightOK!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)題:本實(shí)驗(yàn)使用寬度優(yōu)先搜索算法,但并沒(méi)有進(jìn)行優(yōu)化,所以有時(shí)候程序雖然確實(shí)有解,但是由于算法的效率確實(shí)很低,造成的時(shí)間上的開(kāi)銷(xiāo)有時(shí)候可能會(huì)比起喝一杯咖啡的時(shí)間還要長(zhǎng),這時(shí)候程序會(huì)提示:Please wait patiently。Working . . .六 心得體會(huì):這個(gè)是我們小組的第一個(gè)實(shí)驗(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 老王說(shuō)課課件教學(xué)
- 2025年白蘭地市場(chǎng)專(zhuān)項(xiàng)調(diào)研及投資前景預(yù)測(cè)報(bào)告
- 農(nóng)業(yè)科技園區(qū)廠區(qū)智能化管理與物業(yè)服務(wù)協(xié)議
- 《企業(yè)股權(quán)激勵(lì)計(jì)劃與員工持股管理協(xié)議書(shū)》
- 知識(shí)產(chǎn)權(quán)運(yùn)營(yíng)財(cái)務(wù)擔(dān)保合同負(fù)債風(fēng)險(xiǎn)控制與服務(wù)合同
- 特定礦區(qū)采礦權(quán)抵押擔(dān)保貸款合同
- 水上公園草坪除草與水上活動(dòng)保障合同
- 財(cái)務(wù)顧問(wèn)公司合伙人聘用合同
- 電力設(shè)備鈑金外殼制造與防火噴漆服務(wù)合同
- 建筑施工安全管理?xiàng)l例
- 研究生商業(yè)倫理與會(huì)計(jì)職業(yè)道德教學(xué)課件(完整版)
- 福建福州鼓樓區(qū)小學(xué)2025屆五年級(jí)數(shù)學(xué)第二學(xué)期期末經(jīng)典試題含答案
- 項(xiàng)目管理與工期控制
- DB3311T 235.2-2023 病媒生物防制器具使用技術(shù)規(guī)范 第2部分:毒餌站
- 事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)制度
- DBJ51-T 184-2021 四川省預(yù)成孔植樁技術(shù)標(biāo)準(zhǔn)
- 兒童膿皰型銀屑病的護(hù)理
- 消防工程驗(yàn)收重點(diǎn)及驗(yàn)收常見(jiàn)問(wèn)題圖析
- 《回歸分析》課件
- 心臟手術(shù)圍手術(shù)期
- 中耳炎患者日常護(hù)理
評(píng)論
0/150
提交評(píng)論