




下載本文檔
版權(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ì)文檔-傾情為你奉上農(nóng)夫過(guò)河問(wèn)題1 問(wèn)題描述一個(gè)農(nóng)夫帶著一只狼、一只羊和一棵白菜,身處河的南岸。他要把這些東西全部運(yùn)到北岸。他面前只有一條小船,船只能容下他和一件物品,另外只有農(nóng)夫才能撐船。如果農(nóng)夫在場(chǎng),則狼不能吃羊,羊不能吃白菜,否則狼會(huì)吃羊,羊會(huì)吃白菜,所以農(nóng)夫不能留下羊和白菜自己離開,也不能留下狼和羊自己離開,而狼不吃白菜。要求:利用圖的存儲(chǔ)結(jié)構(gòu)和圖的搜索算法,求出農(nóng)夫?qū)⑺械臇|西運(yùn)過(guò)河的方案。2 需求分析2.1規(guī)定程序功能本題要解決的問(wèn)題就是農(nóng)夫如何帶著狼、羊、白菜安全過(guò)河。要求是船只能容下他和一件物品,另外只有農(nóng)夫才能撐船。如果農(nóng)夫在場(chǎng),則狼不能吃羊,羊不能吃白菜,否則狼會(huì)吃羊
2、,羊會(huì)吃白菜,所以農(nóng)夫不能留下羊和白菜自己離開,也不能留下狼和羊自己離開,而狼不吃白菜。2.2輸入和輸出形式本程序自動(dòng)完成所有情況的輸入,不需要人為的輸入。然后根據(jù)程序里面調(diào)用相應(yīng)函數(shù)模塊可得到一種過(guò)河方案,然后自行輸出。輸出的是農(nóng)夫過(guò)河每一步的方案,即每一步中農(nóng)夫采取的行動(dòng)。 3 概要設(shè)計(jì)3.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)題目要求用圖的存儲(chǔ)結(jié)構(gòu),所以要想辦法將農(nóng)夫、狼、羊、白菜每一步的狀態(tài)用結(jié)點(diǎn)表示,他們狀態(tài)的改變到下一個(gè)結(jié)點(diǎn)可行,則在兩條結(jié)點(diǎn)中加一條邊。但是每個(gè)結(jié)點(diǎn)包含四個(gè)量,如果他們每個(gè)都各自用一個(gè)結(jié)構(gòu)體表示,則圖形就變得相當(dāng)?shù)姆爆崳虼讼氲揭粋€(gè)簡(jiǎn)單的結(jié)局辦法。河的兩岸是兩個(gè)不同的變量,剛好可以用0和
3、1表示,那么四個(gè)狀態(tài)量都用0和1則可表示他們每一步所處的位置,也就能明白農(nóng)夫每次是怎么過(guò)河的。3.2算法的設(shè)計(jì)本程序可以分成四個(gè)模塊,分別是:找到所有情況的點(diǎn)、從中挑選出滿足題意的點(diǎn)、創(chuàng)建滿足題意的點(diǎn)之間的邊、通過(guò)圖的深度優(yōu)先遍歷找到過(guò)河方案。各模塊之間的關(guān)系圖如下:找到所有情況的點(diǎn)(即0000-1111共16種組合)挑出符合題意的點(diǎn)(即農(nóng)夫不在時(shí),狼不和羊、羊不和菜在一起)找到符合題意點(diǎn)之間邊的關(guān)系通過(guò)圖的深度優(yōu)先遍歷找到過(guò)河方案每個(gè)模塊函數(shù)為:void input_vertex(DataType *vertex) /所有情況頂點(diǎn)的輸入int right_vertex(DataType *v
4、ertex,DataType *vertex1) /選出滿足題意的頂點(diǎn)int right_edge(DataType *vertex,RowCol *edge,int n) /選出滿足題意的邊void DepthFSearch(AdjLGraph G,int v,int visited,DataType vert,int *a)/圖的深度優(yōu)先遍歷3.3抽象數(shù)據(jù)類型的設(shè)計(jì) 本題采用的是圖,因此要用到定義圖的結(jié)構(gòu)體 typedef structint f;/農(nóng)夫int w;/狼int s;/羊int c;/菜DataType;/結(jié)點(diǎn)信息結(jié)構(gòu)體定義typedef structint row;int
5、col;RowCol;/邊信息結(jié)構(gòu)體定義typedef struct Nodeint dest;/鄰接邊的弧頭結(jié)點(diǎn)序號(hào)struct Node *next;Edge;/鄰接邊單鏈表的結(jié)點(diǎn)結(jié)構(gòu)體typedef struct DataType data; int sorce;/鄰接邊弧尾結(jié)點(diǎn)序號(hào) Edge *adj;/鄰接邊的頭指針AdjLHeight;/數(shù)組的數(shù)據(jù)元素類型結(jié)構(gòu)體typedef struct AdjLHeight a100;/鄰接表數(shù)組 int numOfVerts;/結(jié)點(diǎn)個(gè)數(shù) int numOfEdges;/邊個(gè)數(shù)AdjLGraph;/鄰接表結(jié)構(gòu)體4 詳細(xì)設(shè)計(jì)4.1算法的主要思想為
6、簡(jiǎn)化結(jié)點(diǎn),將農(nóng)夫、狼、羊、白菜用0和1兩種狀態(tài)量表示,0表示在河的南岸,也就是初始所在的河岸。1表示在河的北岸,即渡過(guò)河到達(dá)的對(duì)岸。那么初始狀態(tài)即為0000,將其變?yōu)?111的中間狀態(tài)量即為過(guò)河方案。那么就從16種所有情況的頂點(diǎn)中選擇符合題意的結(jié)點(diǎn),因?yàn)椴⒉皇撬悬c(diǎn)都滿足題意,限制要求為農(nóng)夫每次最多可帶狼、羊、白菜中的一個(gè)過(guò)河,農(nóng)夫不能留下羊和白菜自己離開,也不能留下狼和羊自己離開。選出所有滿足題意的結(jié)點(diǎn)后,就要構(gòu)造邊,邊即為符合題意兩結(jié)點(diǎn)之間的連接。中間有邊的兩結(jié)點(diǎn)必須符合農(nóng)夫的狀態(tài)在變,并且農(nóng)夫不能留下羊和白菜自己離開,也不能留下狼和羊自己離開。選出所有符合題意的結(jié)點(diǎn)和邊后就構(gòu)成了圖,采用
7、鄰接表的存儲(chǔ)結(jié)構(gòu),然后通過(guò)圖的深度優(yōu)先遍歷,將所有滿足題意的結(jié)點(diǎn)遍歷一遍并輸出,到1111時(shí)即輸出了過(guò)河方案的全部步驟。4.2算法的實(shí)現(xiàn) 存儲(chǔ)16種全部情況以供挑選。 void inputdian(DataType *d) int f,w,s,c,i=0; for(f=0;f<=1;f+) for(w=0;w<=1;w+) for(s=0;s<=1;s+) for(c=0;c<=1;c+) di.f=f; di.w=w; di.s=s; di.c=c; i+; 選出符合題意的所有結(jié)點(diǎn)int rdian(DataType *d,DataType *d2) int i; i
8、nt num=0; for(i=0;i<16;i+) if(!(di.f!=di.s&&(di.w=di.s|di.s=di.c)d2num+=di; return num; 選出符合題意的結(jié)點(diǎn)之間的邊int rbian(DataType *d,RowCol *edge,int n) int df,dw,ds,dc; int i=0,j=0,num=0; for(i=0;i<n;i+) for(j=0;j<n;j+) df=di.f-dj.f;dw=abs(di.w-dj.w);ds=abs(di.s-dj.s);dc=abs(di.c-dj.c);if(df
9、!=0&&(dw+ds+dc)<=1)edgenum.col=i;edgenum+.row=j; return num; 圖的深度優(yōu)先遍歷void DepthFSearch(AdjLGraph G,int v,int visited,DataType d1,int *s) int w; d1(*s)=G.av.data; visitedv=1; (*s)+; w=GetFirstVex(G,v); while(w!=-1) if(!visitedw)DepthFSearch(G,w,visited,d1,s);w=GetNextVex(G,v,w); 4.3函數(shù)的調(diào)用關(guān)系圖inputdian(d);nd=rdian(d,rd);nb=rbian(rd,edge,nd);CreatGraph(&am
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 超疏水表面的耐久性研究進(jìn)展及其應(yīng)用領(lǐng)域探討
- 農(nóng)業(yè)面源污染控制-第5篇-洞察及研究
- 機(jī)房參觀管理辦法細(xì)則
- 農(nóng)戶生計(jì)決策管理辦法
- 工業(yè)自動(dòng)化系統(tǒng)設(shè)計(jì)優(yōu)化研究
- 華為應(yīng)用限制管理辦法
- 協(xié)會(huì)業(yè)余球員管理辦法
- 生產(chǎn)經(jīng)營(yíng)單位安全主體責(zé)任規(guī)定
- 導(dǎo)電水凝膠對(duì)神經(jīng)肌肉組織修復(fù)的研究進(jìn)展
- 內(nèi)部職務(wù)異動(dòng)管理辦法
- 東北大學(xué)分析化學(xué)期末試卷
- 老年健康照護(hù)課件
- 2024屆河北省唐山市玉田縣物理高一第二學(xué)期期末質(zhì)量檢測(cè)試題含解析
- 第三方醫(yī)療消毒供應(yīng)中心項(xiàng)目可行性研究報(bào)告
- 貨架安裝施工方案
- 異口同音公開課
- 專利代理人資格考試實(shí)務(wù)試題及參考答案
- 運(yùn)用信息技術(shù)助力勞動(dòng)教育創(chuàng)新發(fā)展 論文
- GB/T 602-2002化學(xué)試劑雜質(zhì)測(cè)定用標(biāo)準(zhǔn)溶液的制備
- GB/T 4074.8-2009繞組線試驗(yàn)方法第8部分:測(cè)定漆包繞組線溫度指數(shù)的試驗(yàn)方法快速法
- 2023年涉縣水庫(kù)投資管理運(yùn)營(yíng)有限公司招聘筆試模擬試題及答案解析
評(píng)論
0/150
提交評(píng)論