版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、利用棧實現(xiàn)迷宮的求解、要解決的問題: 以一個 m*n 的長方陣表示迷宮,0 和 1 分別表示迷宮中的通路和障礙,設(shè)計一個 程序,對任意設(shè)定的迷宮,求出一條從入口到出口的通路, 或得出沒有通路的結(jié) 論。二:算法基本思想描述:用一個字符類型的二維數(shù)組表示迷宮,數(shù)組中每個元素取值“0”(表示通路)或“ 1”(表示墻壁)。二維數(shù)組的第 0 行、第 m+1 行、第 0 列、第 m+1 列元素全置成“ 1”,表示 迷宮的邊界;第 1 行第 1 列元素和第 m 行第 n 列元素置成“ 0”,表示迷宮的入口和出口走迷宮的過程可以模擬為一個搜索的過程:每到一處,總讓它按東、南、西、北4 個方向順序試探下一個位置
2、;用二維數(shù)組 move 記錄 4 個方向上行下標(biāo)增量和列下標(biāo)增量,則沿第 i 個方向前進(jìn)一步,可能到達(dá)的新位置坐標(biāo)可利用move 數(shù)組確定:Px=x+movei0Py=y+movei1如果某方向可以通過,并且不曾到達(dá),則前進(jìn)一步,在新位置上繼續(xù)進(jìn)行搜索; 如果 4 個方向都走不通或曾經(jīng)到達(dá)過,則退回一步,在原來的位置上繼續(xù)試探下一位置。三:設(shè)計:1:數(shù)據(jù)結(jié)構(gòu)的設(shè)計:(1)定義三元數(shù)組元素的結(jié)構(gòu)typedef struct MazeDirectint Dx; 行標(biāo)int Dy; / 列標(biāo)int direct; /走到下一個坐標(biāo)點的方向MazeDirect;(2)定義鏈表節(jié)點的結(jié)構(gòu)組成typede
3、f struct Lin kNodeelemtype data;數(shù)據(jù)域struct Li nkNode *n ext;/ 指針域Li nkNode;(3)定義鏈棧的頭指針typedef structLi nkNode *top;/棧的頭指針Li nkStack;(4)移動數(shù)組結(jié)構(gòu)的定義typedef structint x,y;/x 為行標(biāo),y 為列標(biāo)Directio n_in crem;2:算法的設(shè)計:【1】迷宮圖的設(shè)計設(shè)迷宮為 m 行 n 列,利用 mazemn來表示一個迷宮,mazeij=0 或 1;其中:0 表示通路,1 表示不通,當(dāng)從某點向下試探時,中間點有4 個方向可以試探,(見圖
4、)而四個角點有2個方向,其它邊緣點有3 個方向,為使問題簡單化我們用mazem+2n+2來表示迷宮,而迷宮的四周的值全部為1。這樣做使問題簡單了,每個點的試探方向全部為4,不用再判斷當(dāng)前點的試探方向有幾個,同時與迷宮周圍是墻壁這一實際問題相一致。假設(shè)有 6 行 8 列的迷宮,如下圖為maze810構(gòu)造的迷宮【2】試探方向的設(shè)計:在上述表示迷宮的情況下,每個點有 4 個方向去試探,如當(dāng)前點的坐標(biāo) (x , y),與其相鄰的 4 個點的坐標(biāo)都可根據(jù)與該點的相鄰方位而得到,如圖2 所示。因為出口在(m,n),因此試探順序規(guī)定為:從當(dāng)前位置向前試探的方向為從正東沿順時針方向進(jìn)行。為了簡化問題,方便的求
5、出新點的坐標(biāo),將從正東開始沿順時針進(jìn)行的這4 個方向(用 0,1, 2,3 表示東、南、西、北)的坐標(biāo)增量放在一個結(jié)構(gòu)數(shù)組move 4 中,在 move 數(shù)組中,每個元素有兩個域組成,x:橫坐標(biāo)增量,y:縱坐標(biāo)增量。Move 數(shù)組如圖 3 所示。move 數(shù)組定義如下:typedef struct int x ;/ 行int y ;列 item ;item move4;這樣對 move 的設(shè)計會很方便地求出從某點(x, y)按某一方向 v (0 v(x , y , d )出棧;求出下一個要試探的方向 d+ ;/當(dāng)遇到死路的時候就出棧,尋找原來點的下一個方向 while(還有剩余試探方向時) i
6、f( d 方向可走)則(x , y , d )入棧;求新點坐標(biāo)(i, j );將新點(i , j)切換為當(dāng)前點(x , y);if ( (x , y )= =( m ,n)結(jié)束;else 重置 d=0 ;else d+ ;五:源程序清單;#i nclude #i nclude int m,n;typedef struct MazeDirectint Dx;int Dy;int direct;MazeDirect;/*定義三元數(shù)組元素的結(jié)構(gòu)*/typedef MazeDirect elemtype;typedef struct Lin kNodeelemtype data;struct Lin
7、kNode *n ext;/*定義鏈表節(jié)點的結(jié)構(gòu)組成*/Li nkNode;typedef structLi nkNode *top;/*定義鏈棧的頭指針*/Lin kStack;void ini_stack(LinkStack *stack)/* 初始化鏈棧 */stack-top=NULL;int empty_Stack(LinkStack *stack)/* 判斷是否為空棧 */if (stack-top!=NULL)return 0;elsereturn 1;void push_Stack(LinkStack *stack,elemtype x)/* 入棧 */Li nkNode *s
8、;s=(L in kNode *)malloc(sizeof(Li nkNode);s-data=x;s-n ext=stack-top;stack-top=s;elemtype pop_Stack(LinkStack *stack) /* 出棧 */ elemtype x;Lin kNode *p;elemtype tmpNull=0,0,0;if (stack-top=NULL)return tmpNull;/(NULL)else x=stack-top-data; p=stack-top;stack-top=p-n ext; free(p);return (x); int size_st
9、ack(L in kStack stack) int i;Li nkNode *Numb;i=0;Numb=stack.top; while(Numb!=NULL) Numb=Numb-n ext; i+;return i; int w,t,maze100100;typedef structint x,y;/x 為行標(biāo),y 為列標(biāo)Directio nn crem;Directionncrem MazeMove4=0,1,1,0,0,-1,-1,0;typedef MazeDirect TmpType;int Maze_path()MazeDirect tmp,path;Lin kStack s
10、;int x,y,Px,Py,d,flag=O;/*棧的規(guī)模大小*/in i_stack (& s);tmp.Dx=1;tmp.Dy=1;tmp.direct=-1;push_Stack (&s,tmp);while (!empty_Stack( &s)tmp=pop_Stack (&s);x=tmp.Dx;y=tmp.Dy;d=tmp.direct+1; 遇到死路的時候,回溯(通過出棧完成)while (d4)Px=x+MazeMoved.x;Py=y+MazeMoved.y;if (mazePxPy=O)tmp.Dx=x;tmp.Dy=y;tmp.direc
11、t=d;push_Stack (&s,tmp);x=Px;y=Py;maze x y=-1;/* 標(biāo)記,防止重復(fù)點 */ if(x=m&y=n)flag=1;printf(n 到達(dá)迷宮出口:d,%d,x,y);printf(n 經(jīng)過的節(jié)點有:%d 個,size_stack(s);while(!empty_Stack( &s)path=pop_Stack (&s);prin tf(n(%d,%d,%d),path.Dx,path.Dy,path.direct);break;else d=0;結(jié)束 ifelse d+;/結(jié)束內(nèi)部 while/結(jié)束外部 whilereturn flag;void mai n()printf(”請輸入迷宮圖的行數(shù)和列數(shù)(輸入格式為 i,j)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度解除聘用合同及知識產(chǎn)權(quán)歸屬協(xié)議
- 2025年度現(xiàn)澆混凝土預(yù)制構(gòu)件施工安全監(jiān)理合同
- 二零二五年度股權(quán)并購重組合同范本
- 科技產(chǎn)品中的數(shù)學(xué)設(shè)計原理
- 2025年度消防演練場地設(shè)計與包工包料施工合同
- 2025年度網(wǎng)絡(luò)安全聘用安全專家的保密合同
- 二零二五年度蛋糕店租賃與品牌使用合同
- 二零二五年度合資企業(yè)股權(quán)比例調(diào)整合同范本
- 2025年度高端產(chǎn)品銷售代表入職服務(wù)合同
- 二零二五年度電商直播銷售合作合同
- 人力資源服務(wù)公司章程
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- 病案管理質(zhì)量控制指標(biāo)檢查要點
- 2024年西藏中考物理模擬試題及參考答案
- 九型人格與領(lǐng)導(dǎo)力講義
- 藥品經(jīng)營和使用質(zhì)量監(jiān)督管理辦法培訓(xùn)試題及答案2023年9月27日國家市場監(jiān)督管理總局令第84號公布
- 人教版五年級上冊數(shù)學(xué)脫式計算練習(xí)200題及答案
- 卵巢黃體囊腫破裂教學(xué)查房
- 醫(yī)院定崗定編
- 2023年大學(xué)物理化學(xué)實驗報告化學(xué)電池溫度系數(shù)的測定
- 腦出血的護(hù)理課件腦出血護(hù)理查房PPT
評論
0/150
提交評論