



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實習(xí) 2棧的應(yīng)用本次實習(xí)的主要目的在于幫助學(xué)生深入了解棧的特性,以便在實際問題背景下靈活運(yùn)用他們;同時還將鞏固對棧這種結(jié)構(gòu)的構(gòu)造方法的理解。實驗課時6 課時程序 1:迷宮問題問題描述以一個 m×n 的長方陣表示迷宮, 0和 1分別表示迷宮中的通路和障礙。設(shè)計一個程序,對任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。基本要求首先實現(xiàn)一個以順序表或鏈表做存儲結(jié)構(gòu)的棧類型,然后編寫一個求解迷宮的非遞歸程序。求得的通路以三元組(i,j,d)的形式輸出,其中:( i,j)指示迷宮中的一個坐標(biāo),d表示走到下一坐標(biāo)的方向。如:對下列數(shù)據(jù)的迷宮,輸出的一條通路為: ( 1,1,1
2、),(1,2,2),( 2, 2, 2),測試數(shù)據(jù)迷宮的測試數(shù)據(jù)如下:左上角(1, 1)為入口,右下角(3, 4)為出口。0123451111111001111001111000!1111111 實現(xiàn)提示 計算機(jī)解迷宮通常用的是 “窮舉求解” 方法,即從入口出發(fā), 順著某一個方向進(jìn)行探索,若能走通, 則繼續(xù)往前進(jìn);否則沿原路退回, 換一個方向再繼續(xù)探索, 直至所有可能的通路都探索到為止 ,如果所有可能的通路都試探過,還是不能走到終點(diǎn),那就說明該迷宮不存在從起點(diǎn)到終點(diǎn)的通道,可以二維數(shù)組存儲迷宮數(shù)據(jù)。程序?qū)崿F(xiàn) #include <stdio.h>#include <stdlib
3、.h>/1.迷宮位置坐標(biāo)類型typedef structint x;/ 行int y;/ 列PosType;#define MAXENGTH 25 /迷宮最大行列數(shù)位25typedef int MazeTypeMAXENGTHMAXENGTH;/迷宮數(shù)列typedef struct/ 定義棧int ord;/ 通道塊在路徑上的序號PosType seat;/通道塊在迷宮中的位置int di;/走向下一塊的方向(03 表示東、南、西、北)SElemType;/2.全局變量MazeType m;/ 迷宮數(shù)組int curstep=1;/ 當(dāng)前位置,初值為1#define STACK_INIT
4、_SIZE 10/存儲空間初始分配量#define STACKINCREMENT 2/存儲空間分配增量/3.棧的順序存儲表示typedef struct SqStackSElemType *base;/ 尾指針SElemType *top;/ 頭指針int stacksize;/ 棧大小SqStack;/ 順序表/4.構(gòu)造空棧int InitStack(SqStack &S)S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!(S.base)exit(0);S.top=S.base;S.stacksize=
5、STACK_INIT_SIZE;return 1;/5.判斷棧是否為空(用來判斷迷宮是否不可達(dá)到出口)int StackEmpty(SqStack S)if(S.top=S.base)/ 棧底與棧頂相等為空棧return 1;elsereturn 0;/6.插入元素int Push(SqStack &S,SElemType e)if(S.top-S.base>=S.stacksize)/ 棧頂 -棧底 >=棧長,說明空間已滿S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemT
6、ype);if(!S.base)exit(0);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*(S.top)+=e;return 1;/7.棧不為空時,刪除棧頂元素,用 e 返回(用于當(dāng)棧頂元素各方向均不通時,將其從路徑中刪除)int Pop(SqStack &S,SElemType &e)if(S.top=S.base)return 0;e=*-S.top;/ 先將 S.top 的值賦給 e,再將 S.top 向下移一位 return 1;/8.判斷迷宮 m 中 b 點(diǎn)是否可通過(是 1,否 0),其中墻為 0,可
7、通過路徑為 1,不可通過路徑為 -1int Pass(PosType b)if(mb.xb.y=1)return 1;elsereturn 0;/9.是迷宮 m 中 a 的序號變?yōu)樽阚E(即該位置目前可通過)void FootPrint(PosType a)ma.xa.y=curstep;/10.根據(jù)當(dāng)前位置方向,返回下一位置PosType NextPos(PosType c,int di)PosType direc4=0,1,1,0,0,-1,-1,0;c.x+=direcdi.x;c.y+=direcdi.y;return c;/11.道路不能通過時(即為死路),將其標(biāo)記為-1void Ma
8、rkPrint(PosType b)mb.xb.y=-1;/12.求迷宮出口int MazePath(PosType start,PosType end)SqStack S;PosType curpos;/當(dāng)前位置SElemType e;InitStack(S);curpos=start;doif(Pass(curpos)FootPrint(curpos);e.ord=curstep;e.di=0;Push(S,e);curstep+;if(curpos.x=end.x&&curpos.y=end.y)return 1;curpos=NextPos(curpos,e.di);e
9、lseif(!StackEmpty(S)Pop(S,e);curstep-;while(e.di=3&&!StackEmpty(S)MarkPrint(e.seat);Pop(S,e);curstep-;if(e.di<3)e.di+;Push(S,e);curstep+;curpos=NextPos(e.seat,e.di);while(!StackEmpty(S);return 0;/13.輸出迷宮結(jié)構(gòu)void Print(int x,int y)int i,j;for(i=0;i<x;i+)for(j=0;j<y;j+)printf("%3d&
10、quot;,mij);printf("n");/14.主函數(shù)int main()PosType begin,end;int i,j,x,y,x1,y1;printf(" 請輸入迷宮行列數(shù)(包括外墻):(空格隔開) n");scanf("%d %d",&x,&y);for(i=0;i<x;i+)/定義外墻m0i=0;mx-1i=0;for(j=0;j<y-1;j+)mj0=0;mjy-1=0;for(i=1;i<x-1;i+)for(j=1;j<y-1;j+)mij=1;/墻內(nèi)初始值均為1/輸入迷
11、宮中墻的個數(shù)printf(" 輸入墻的個數(shù):");scanf("%d",&j);/安排墻的位置printf(" 請輸入墻的位置(坐標(biāo)),用空格隔開 :n");for(i=1;i<=j;i+)scanf("%d %d",&x1,&y1);mx1y1=0;printf(" 迷宮結(jié)構(gòu)如下n");Print(x,y);printf(" 請輸入起點(diǎn)坐標(biāo):n");scanf("%d %d",&begin.x,&begin.y);printf(" 請輸入終點(diǎn)坐標(biāo)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有效吸收知識應(yīng)對2025年證券從業(yè)資格證考試試題及答案
- 微生物檢測的實踐意義試題及答案
- 項目實施中的流程優(yōu)化分析探討試題及答案
- 窯洞修整施工方案怎么寫
- 考生反思與總結(jié)證券從業(yè)試題及答案
- 福建事業(yè)單位考試職業(yè)發(fā)展形勢的未來展望試題及答案
- 電玩具高級編程語言應(yīng)用考核試卷
- 2025年危險化學(xué)品安全-氯化工藝作業(yè)模擬考試題及答案
- 2024年項目管理關(guān)鍵干系人的考察試題及答案
- 公路客運(yùn)信息化建設(shè)與應(yīng)用考核試卷
- 藝術(shù)概論智慧樹知到答案2024年寧波財經(jīng)學(xué)院
- 微納尺度力學(xué)與器件
- 法莫替丁注射液-外科
- 全廠接地裝置安裝施工方案
- 人工智能在航空航天工程中的應(yīng)用
- 2024年荊門中荊投資控股集團(tuán)招聘筆試沖刺題(帶答案解析)
- 2024山西建設(shè)投資集團(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- +山東省泰安市肥城市2023-2024學(xué)年七年級下學(xué)期期中考試英語試題+
- (高清版)JTGT 5440-2018 公路隧道加固技術(shù)規(guī)范
- 北京市各區(qū)2024屆高三二模政治試題匯編:法律與生活-2024屆高考政治三輪沖刺
- 深靜脈血栓形成的診斷和治療指南文檔
評論
0/150
提交評論