迷宮問題求解

一扫步、目的

1、進一步理解和掌握各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)匈子、存儲結(jié)構(gòu)和操作實現(xiàn)算法河胎。

2、掌握分析問題虎敦,求解問題的方法并提高設計編程實現(xiàn)的能力游岳。

3、熟練掌握C語言或者C++語言的各種操作其徙,制定清晰的程序流程圖和數(shù)據(jù)結(jié)構(gòu)的詳細定義胚迫。

二、實驗具體內(nèi)容

1唾那、用回溯法求解迷宮問題晌区,可以用一個棧保存探索的位置。并且在該迷宮的行走中朗若,站在一點可以有四個方向選擇,依次判斷四個方向是否能走哭懈。

2、定義一個固定格式(10*10)迷宮如下:

```

{?? 0,1,1,1,0,0,0,0,0,0,

0,0,0,1,0,0,0,1,0,0,?

0,1,0,1,1,0,0,1,0,0,?

0,1,0,0,1,0,1,1,0,0,?

0,1,0,0,1,0,1,1,0,0,?

1,1,1,0,1,0,1,0,0,0,?

0,0,1,0,0,0,1,0,1,1,?

0,0,1,0,0,0,1,0,1,1,?

0,1,1,0,1,0,1,0,0,0,?

0,0,0,0,1,0,1,1,0,0,? };

```

3遣总、并設置左上角(0,0)為入口轨功,右下角(9旭斥,9)為出口古涧,0表示通路垂券,1表示有墻羡滑。

4菇爪、用二維數(shù)組MAZE[x][y] 來表示迷宮的狀態(tài)算芯,0表示通路,1表示有墻凳宙,2表示已經(jīng)走過熙揍。

5届囚、用STL的棧儲存走過的路徑是尖,壓棧表示進入下一步,退棧表示返回上一步析砸。每個棧元素是當前位置坐標被結(jié)構(gòu)體對象包裝產(chǎn)生的爆袍。

三、分析

首先要考慮如何判斷行進方向陨囊,并且確定下一個方向可以走,再考慮如何判定走過的路胁塞,這里我采用的是將其值設置為2压语,然后每走一步就將這個位置包裝起來壓棧,假如無法再繼續(xù)行走的話就進行回溯扰才,相當于原路返回,伴隨的還有之前壓入的錯誤路徑的棧元素要出棧衩匣,反復進行從而將所有正確位置壓入棧中粥航,由棧底往棧頂遍歷,從而輸出正確路徑递雀。

四、代碼

結(jié)構(gòu)體定義:

```

struct pos{?

??? int i,j;?

};?

```

方向判定:

判斷是否有通路缀程,有則返回通路位置拦焚,無則返回原來位置?

//向上??

??? if(判定是否是通路且是否在迷宮范圍之內(nèi)且是否已經(jīng)走過了){?

????????? 執(zhí)行位置變動和將此位置標記為已走,返回下個位置?

??? }//向右

else if(判定是否是通路且是否在迷宮范圍之內(nèi)且是否已經(jīng)走過了){?

??????????????? 執(zhí)行位置變動和將此位置標記為已走赎败,返回下個位置

??? }//向下

else if(判定是否是通路且是否在迷宮范圍之內(nèi)且是否已經(jīng)走過了){?

??????????????? 執(zhí)行位置變動和將此位置標記為已走,返回下個位置

??? }//向左

else if(判定是否是通路且是否在迷宮范圍之內(nèi)且是否已經(jīng)走過了){?

??????????????? 執(zhí)行位置變動和將此位置標記為已走僵刮,返回下個位置?

??? }?

??? 否則返回上一個位置。

數(shù)據(jù)結(jié)構(gòu)操作:

stack Path;?

??? 聲明兩個結(jié)構(gòu)體對象curr勇吊,nex窍仰;?

??? 將接收入棧元素的結(jié)構(gòu)體對象curr初始化為入口元素,i=0驹吮,j=0;

??? 將入口元素入棧碟狞;

將入口(0,0)設置成走過的位置;

```

?while(判斷棧是否為空){

??????? curr=棧頂;?

??????? nex=curr;?

???????nex=Move(curr);//將curr傳入Move函數(shù)判斷方向并行走脆淹,從而發(fā)現(xiàn)通路返回下個位置或者沒有發(fā)現(xiàn)通路返回上個位置?

???????if(!(curr.i==nex.i&&curr.j==nex.j))?

??????????? 發(fā)現(xiàn)通路,將nex壓入棧頂窟绷;

??????? else?

??????????? 未發(fā)現(xiàn)通路咐柜,將棧頂出棧;

????? ??if(判斷nex是否到達出口(9拙友,9)){?

??????????? struct posroute[Path.size()];?

??????????? intz=0;?

??????????? while(判斷棧時候為空,不空執(zhí)行下列程序辐棒,空則跳出){?

??????????????? curr=棧頂元素;

??????????????? 將棧頂元素放入route結(jié)構(gòu)體類型數(shù)組中漾根;

??????????????? 棧頂出棧,以便下次操作逼蒙;

??????????? }?

??????????? for(intk=z-1;k>=0;k--){?

??????????????? 按規(guī)格輸出路徑寄疏;

??????????? }?

??????????? return;?

??????? }?

??? }?

???cout<<"NO Path!"<

```

主函數(shù):自行想象.......

五、運行結(jié)果

迷宮如下:

0 1 1 1 0 0 0 0 0 0

0 0 0 1 0 0 0 1 0 0

0 1 0 1 1 0 0 1 0 0

0 1 0 0 1 0 1 1 0 0

0 1 0 0 1 0 1 1 0 0

1 1 1 0 1 0 1 0 0 0

0 0 1 0 0 0 1 0 1 1

0 0 1 0 0 0 1 0 1 1

0 1 1 0 1 0 1 0 0 0

0 0 0 0 1 0 1 1 0 0


則路徑為:

(0,0)->(1,0)->(1,1)->(1,2)->(2,2)

->(3,2)->(3,3)->(4,3)->(5,3)->(6,3)

->(6,4)->(6,5)->(5,5)->(4,5)->(3,5)

->(2,5)->(1,5)->(0,5)->(0,6)->(0,7)

->(0,8)->(0,9)->(1,9)->(2,9)->(3,9)

->(4,9)->(5,9)->(5,8)->(5,7)->(6,7)

->(7,7)->(8,7)->(8,8)->(8,9)->(9,9)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驳棱,一起剝皮案震驚了整個濱河市农曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乳规,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荷并,死亡現(xiàn)場離奇詭異青扔,居然都是意外死亡翩伪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門缘屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犁珠,你說我怎么就攤上這事互亮。” “怎么了豹休?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長凤巨。 經(jīng)常有香客問我,道長敢茁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任渣聚,我火速辦了婚禮僧叉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓶堕。我一直安慰自己,他們只是感情好谭梗,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布宛蚓。 她就那樣靜靜地躺著,像睡著了一般凄吏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痕钢,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天任连,我揣著相機與錄音,去河邊找鬼随抠。 笑死,一個胖子當著我的面吹牛拱她,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诸蚕,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼背犯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起倔矾,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤柱锹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后禁熏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胧华,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年宙彪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悲没。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡男图,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出享言,到底是詐尸還是另有隱情渗鬼,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布差牛,位于F島的核電站,受9級特大地震影響堰乔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镐侯,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韵卤。 院中可真熱鬧,春花似錦沈条、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仲翎,卻和暖如春铛漓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浓恶。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留湿镀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓勉痴,卻偏偏與公主長得像树肃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胸嘴,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容