




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
3.3棧的應(yīng)用--迷宮求解例四、迷宮【問題描述】
以一個m*n的長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設(shè)計一個程序,對任意設(shè)定的迷宮,求出一條從入口到出口的通路。或得出沒有通路的結(jié)論迷宮用計算機來求解方法其實很簡單,就是走遍所有可能的路徑,直到找到出口為止,當(dāng)走到錯誤的路線的時候,就退回上一個路口交叉點,選擇其他方向.這種思維其實用堆棧(stack)完全可以解決例四、迷宮求解通常用的是“窮舉求解”的方法
11
112
222
232
133
134
424
125
126
416
315
314
43$$$$$$$$迷宮思路
在設(shè)計這個問題時,我考慮到以下幾點:
1、迷宮入口和出口的坐標(biāo)
2、保存迷宮的2維數(shù)組
3、獲得路徑的函數(shù)
我們模仿人走迷宮時的思路,設(shè)置一個當(dāng)前點,一個目標(biāo)點(下一個要走的點)。初始情況下當(dāng)前點為入口,終止條件為當(dāng)前點為出口,這樣,我們的函數(shù)大概結(jié)構(gòu)就出來了。
在從入口到出口的過程中程序?qū)Ξ?dāng)前點的上、下、左、右四個點依次進行判斷,當(dāng)發(fā)現(xiàn)任一個方向是未走過的區(qū)域時,就將當(dāng)前點指向那個點進行嘗試,同時將當(dāng)前點入棧并做標(biāo)記。而當(dāng)4個方向都不通或已走過時,則為死路,標(biāo)記當(dāng)前點為死路并從棧中彈出上一個點繼續(xù)進行嘗試,這時因為當(dāng)前點已被標(biāo)記為死路,則彈出上一個點時就不會重復(fù)這條路,達到尋找正確路徑的效果。
描述:當(dāng)前點:坐標(biāo)位置(x,y),可用二維數(shù)組實現(xiàn)(seat)記錄當(dāng)前點探索的方向:di如起點為(1,1),先判斷東(1),南(2),西(3),北(4),順時針方向轉(zhuǎn),判斷其鄰居是否通,不同的話,鄰居轉(zhuǎn)向下一個方向探索,若均不通,則按原路返回,退棧.取棧頂元素,沿下一個方向探索注意:凡走過的也要標(biāo)記符號:迷宮的分析迷宮設(shè)置為一個2維數(shù)組,通路為1,不通為0,但是四周為屏障設(shè)置一個棧來存儲迷宮的路徑:記錄每個位置的坐標(biāo)值(x,y),同時將納入棧中的路徑,記錄它來自何方,也就是記錄它的探測方向編號(東,南,西,北類似于地圖的指示,1,2,3,4)通的話就入棧操作:(x,y,di)探測當(dāng)前坐標(biāo)位置的所有鄰居均不通:出棧,打上腳印,此路不通,不再加入再對棧頂重新探測尋求新的鄰居入棧直到達到迷宮出口(有解)或退回到原路的入口(無解)程序流程圖開始迷宮求解構(gòu)建迷宮結(jié)束打印路徑迷宮算法判斷當(dāng)前結(jié)點是否通暢通暢,則記錄該點到棧中,并判斷是為終點,不為終點的話,繼續(xù)前行探索不通暢,則后退,換方向訪問,到??战Y(jié)束設(shè)置訪問東鄰居開始,若其不通,換方向探路鄰居訪問遍,均不通,退出此結(jié)點,取當(dāng)前棧頂?shù)奈丛L問鄰居探路總結(jié):對于一個入棧的節(jié)點要記錄其位置(x,y),同時記錄其探索鄰居的方向di(1,2,3,4)記錄四個鄰居同時對于已經(jīng)退出的節(jié)點標(biāo)記無需標(biāo)記其”不通”,只要沿下一個方向轉(zhuǎn)圈就可.迷宮演示見cd中的遞歸cd迷宮DS-Algo-VC下的第三章算法3.3求迷宮路徑算法的基本思想是:若當(dāng)前位置“可通”,則納入路徑,繼續(xù)前進;若當(dāng)前位置“不可通”,則后退,換方向繼續(xù)探索;若四周“均無通路”,則將當(dāng)前位置從路徑中刪除出去。設(shè)定當(dāng)前位置的初值為入口位置;
do{
若當(dāng)前位置可通,
則{將當(dāng)前位置插入棧頂;
若該位置是出口位置,則算法結(jié)束;否則切換當(dāng)前位置的東鄰方塊為新的當(dāng)前位置;
}
否則{
}}while(棧不空);求迷宮中一條從入口到出口的路徑的算法:
……若棧不空且棧頂位置尚有其他方向未被探索,則設(shè)定新的當(dāng)前位置為:沿順時針方向旋轉(zhuǎn)找到的棧頂位置的下一相鄰塊;若棧不空但棧頂位置的四周均不可通,則{刪去棧頂位置;//從路徑中刪去該通道塊
若棧不空,則重新測試新的棧頂位置,
直至找到一個可通的相鄰塊或出棧至??眨唬魲?眨瑒t表明迷宮沒有通路。實驗內(nèi)容
一個m×n的迷宮,0:暢通,1:障礙,設(shè)計一個程序,對任意設(shè)定的迷宮,求出從入口到出口的通路。入口:11;出口:68
010110111001101001100111100110011100110101110000
實現(xiàn)提示1.用一種稱為廣度搜索的算法,將迷宮的入點(1,1)作為第一個出發(fā)點,向四周搜索可通行的位置,形成第一層新的出發(fā)點,然后對第一層中各個位置再分別向四周搜索可通行的位置,形成第二層新的出發(fā)點,如此進行下去直至到達迷宮的出口點(m,n)為止。實現(xiàn)提示2.為了避免多次檢測是否走到邊沿,將迷宮周圍各鑲上一條邊,相當(dāng)于在迷宮的周圍布上一圈不通過的的墻。3.為了避免有的點被重復(fù)到達,應(yīng)標(biāo)志已通過的位置,可以采用一個標(biāo)志數(shù)組來標(biāo)志已通過了的位置。實現(xiàn)提示4.為了記錄搜索過程中到達位置及其出發(fā)點,可以建立一個結(jié)構(gòu)體數(shù)組,數(shù)組的每組元素有三個域x,y,pre,其中分別記錄x和y到達位置的行、列坐標(biāo),pre記下其出發(fā)點在數(shù)組中的坐標(biāo)程序流程圖開始迷宮求解構(gòu)建迷宮結(jié)束打印路徑注意問題
1.同學(xué)們可以先按照給定的迷宮去做,完成的情況下可以將迷宮改成可根據(jù)輸入變化的任意迷宮。
2.注意數(shù)組表示的迷宮下標(biāo)和現(xiàn)實迷宮下標(biāo)的不同。
3.跟蹤迷宮求解過程中程序的執(zhí)行情
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水浪費行為治理專項行動計劃
- 提升水上活動安全監(jiān)管的工作要求計劃
- 幼兒園學(xué)期教研計劃
- 生物知識的區(qū)域性調(diào)查報告計劃
- 學(xué)校秋季多元化學(xué)習(xí)活動計劃
- 前臺文員職業(yè)技能提升計劃
- 秋季區(qū)域聯(lián)盟學(xué)習(xí)計劃
- 提高急救意識的社區(qū)活動計劃
- 教學(xué)銜接與過渡方案計劃
- 項目的角度下的營推廣過程中多種人員互動及其角差發(fā)揮的研究
- VTE防治在臨床科室的落地
- 2025年度個人住房買賣合同(帶家居家具)
- 生產(chǎn)車間布局優(yōu)化與現(xiàn)場改善的策略研究
- 文化自信-最炫中國風(fēng)(2024年內(nèi)蒙古赤峰中考語文試卷非連續(xù)性文本閱讀試題)
- (新版)廣電全媒體運營師資格認(rèn)證考試復(fù)習(xí)題庫(含答案)
- 2024年法律職業(yè)資格考試(試卷一)客觀題試卷與參考答案
- 安全生產(chǎn)重大事故隱患排查報告表
- 2021年四川省綿陽市中考物理真題及答案
- 小學(xué)音樂課后服務(wù)教學(xué)設(shè)計方案計劃
- 人教版八年級數(shù)學(xué)下冊全冊教案(完整版)教學(xué)設(shè)計
- 電機零部件中英文對照表
評論
0/150
提交評論