版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
竭誠為您提供優(yōu)質(zhì)文檔/雙擊可除數(shù)據(jù)結(jié)構(gòu)迷宮問題實(shí)驗(yàn)報告
篇一:數(shù)據(jù)結(jié)構(gòu)-迷宮-實(shí)驗(yàn)報告與代碼
一.需求分析
本程序是利用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出。首先由用戶輸入一組二維數(shù)組來組成迷宮,確認(rèn)后程序自動運(yùn)行,當(dāng)迷宮有完整路徑可以通過時,以0和1所組成的迷宮形式輸出,標(biāo)記所走過的路徑結(jié)束程序;當(dāng)迷宮無路徑時,提示輸入錯誤結(jié)束程序。程序執(zhí)行的命令:1創(chuàng)建迷宮;2求解迷宮;3輸出迷宮求解;
二.算法設(shè)計(jì)
本程序中采用的數(shù)據(jù)模型,用到的抽象數(shù)據(jù)類型的定義,程序的主要算法流程及各模塊之間的層次調(diào)用關(guān)系
程序基本結(jié)構(gòu):
設(shè)定棧的抽象數(shù)據(jù)類型定義:
ADTstack{
數(shù)據(jù)對象:D={ai|ai∈charset,i=1,2,3,?..,n,n>=0;}
數(shù)據(jù)關(guān)系:R={|ai?1,ai∈D,i=2,?,n}
設(shè)置迷宮的抽象類型
ADTmaze{
數(shù)據(jù)對象:D={ai|ai∈‘’,‘@’,‘#’,‘1’,i=1,2,?,n,n>=0}數(shù)據(jù)關(guān)系:R={r,c}
r={|ai-1,ai∈D,i=1,2,?,n,}
c=|ai-1,ai∈D,i=1,2,?,n,}
結(jié)構(gòu)體定義:
typedefstruct//迷宮中x行y列的位置
{intx;
inty;
}posType;
typedefstruct//棧類型
{intord;//通道塊在路徑上的“序號”
posTypeseat;//通道塊在迷宮中的“坐標(biāo)位置”
intdi;//從此通道塊走向下一通道塊的“方向”
}mazeType;
typedefstruct
{mazeType*base;
mazeType*top;
intstacksize;
}mazestack;
基本函數(shù):
statusInitstack(mazestack
if(!s.base)
exit(oVeRFLow);
s.top=s.base+s.stacksize;
s.stacksize+=sTAcKIncRemenT;
}
*s.top++=e;
returnoK;
}
2)出棧操作
statuspop(mazestack
e=*--s.top;
returnoK;
}
3)判斷棧是否為空
statusstackempty(mazestack
returneRRoR;
}
4)迷宮路徑求解
statusmazepath(posTypestart,posTypeend)//迷宮路徑求解{
posTypecurpos;
mazestacks;
mazeTypee;
intcurstep;
Initstack(s);
curpos=start;//設(shè)定當(dāng)前位置為入口位置curstep=1;//探索第一步
cout{
if(pass(curpos))//當(dāng)前位置可以通過,即是未曾走到的通道塊{
Footprint(curpos);//留下足跡
e.ord=curstep;
e.seat=curpos;
e.di=1;
push(s,e);//加入路徑
if(curpos.x==end.x
returnTRue;//到達(dá)終點(diǎn)(出口)
}
curpos=nextpos(curpos,e.di);//下一位置是當(dāng)前位置的東鄰
++curstep;//探索下一步
}
else//當(dāng)前位置不能通過
{
if(!stackempty(s))
{
pop(s,e);
while(e.di==4//留下不能通過的標(biāo)記pop(s,e);
cout}
if(e.di{
++e.di;//換下一個方向探索
篇二:數(shù)據(jù)結(jié)構(gòu)試驗(yàn)報告-迷宮問題
實(shí)驗(yàn)報告:迷宮問題
題目:編寫一個求解迷宮通路的程序
一、需求分析:
1)采用二維數(shù)組maze[m][n]來表示迷宮,其中:maze[0][j]和maze[m-1][j](0≤j≤n-1)及maze[i][0]和maze[i][n-1](0≤i≤m-1)為添加在迷宮外圍的一圈障礙。數(shù)據(jù)元素值0表示通路,1表示障礙。限定迷宮的大小m≤8,n≤10.
2)本次實(shí)驗(yàn)直接在主程序中輸入表示迷宮的二維數(shù)組。另外,迷宮的入口和出口位置都將在主程序中直接設(shè)置。
3)實(shí)驗(yàn)中求出的迷宮通路用“-”表示,迷宮的障礙用“#”表示,已走過但未能求出通路的路徑用“@”表示。
4)本程序只求出一條成功的通路。
5)本次實(shí)驗(yàn)將直接輸出構(gòu)建迷宮的二維數(shù)組、初始化的二維數(shù)組和求解后的迷宮數(shù)組。
二、概要設(shè)計(jì):
數(shù)據(jù)結(jié)構(gòu)及其抽象數(shù)據(jù)類型的定義。
(1)棧的抽象數(shù)據(jù)類型
ADTstack{
數(shù)據(jù)對象:D={ai|ai∈charset,i=1,2?n,n>=0}
數(shù)據(jù)關(guān)系:R1={|ai-1,ai∈D,i=2,?n}
基本操作:
Initstack(,#,@,*},0基本操作:
Initmaze(
#defineRAnge20//RAnge為實(shí)際分配的空間行列數(shù)
#definem8//maze數(shù)組的行數(shù)
#definen11//maze數(shù)組的列數(shù)
typedefstruct//表達(dá)迷宮元素位置信息的坐標(biāo)
{
intr,c;
}posType;
typedefstruct//m,n為待處理的迷宮的行列數(shù),RAnge為實(shí)際分配的空間行列數(shù){
intm,n;
chararr[RAnge][RAnge];
}mazeType;
typedefintdirectiveType;//東西南北方向用1,2,3,4整數(shù)對應(yīng)
typedefstruct//路徑擬用棧來存儲,此處定義棧元素中數(shù)據(jù)域的信息{
intstep;//存儲到達(dá)該點(diǎn)時經(jīng)歷的步數(shù)
posTypeseat;//該點(diǎn)位置
directiveTypedi;//從該點(diǎn)位置走向下一位置的方向
}elemType;
typedefstructnodeType//路徑擬用鏈棧來存儲
{
elemTypedata;
structnodeType*next;
}nodeType,*LinkType;
typedefstruct//對鏈棧的頭指針和元素個數(shù)進(jìn)行封裝
{
LinkTypetop;
intsize;
}stack;
//以上是對存儲結(jié)構(gòu)逐層進(jìn)行定義
voidInitstack(stack
s.size=0;
}
statusmakenode(LinkType
if(!p)
returnFALse;
p->data=e;
p->next=nuLL;
returnTRue;
}
statuspush(stack
if(makenode(p,e))
{
p->next=s.top;
s.top=p;
s.size++;
returnTRue;
}
returnFALse;
}
statusstackempty(stacks)
{//判斷是否為空棧,這里是通過top指針為nuLL來判斷的,本質(zhì)上也可以通過size是否為0來判斷
if(s.top==nuLL)
returnTRue;
returnFALse;
}
statuspop(stack
if(stackempty(s))
returnFALse;
else
{
p=s.top;
s.top=s.top->next;
e=p->data;
s.size--;
free(p);
returnTRue;
}
}
statuspass(mazeTypemaze,posTypecurpos)
{//判斷迷宮maze中,當(dāng)前位置curpos是否是一個可達(dá)位置
intm,n;//注意這里的m,n只是表達(dá)下標(biāo)的臨時變量,與前面出現(xiàn)的m,n是不一樣的
m=curpos.r;
n=curpos.c;
if(maze.arr[m][n]==)
returnTRue;
returnFALse;
}
statussame(posTypecurpos,posTypeend)
{//判斷當(dāng)前位置curpos是否已達(dá)出口
if(curpos.r==end.r
returnFALse;
}
voidFootprint(mazeType
m=curpos.r;
n=curpos.c;
maze.arr[m][n]=-;
}
posTypenextpos(posTypecurpos,intdi)
{//通過di的值,確定下一步的位置,下一步位置實(shí)際是當(dāng)前位置的四個鄰居中的一個
switch(di)
{
case1:
curpos.c++;//向東走
break;
case2:
curpos.r++;//向南走
break;
case3:
curpos.c--;//向西走
break;
篇三:數(shù)據(jù)結(jié)構(gòu)迷宮問題實(shí)驗(yàn)報告
《數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)》
迷宮問題實(shí)驗(yàn)報告
——實(shí)驗(yàn)二
專業(yè):物聯(lián)網(wǎng)工程
班級:物聯(lián)網(wǎng)1班
學(xué)號:15180118
姓名:劉沛航
一、實(shí)驗(yàn)?zāi)康?/p>
本程序是利用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出。首先由用戶輸入一組二維數(shù)組來組成迷宮,確認(rèn)后程序自動運(yùn)行,當(dāng)迷宮有完整路徑可以通過時,以0和1所組成的迷宮形式輸出,標(biāo)記所走過的路徑結(jié)束程序;當(dāng)迷宮無路徑時,提示輸入錯誤結(jié)束程序。
二、實(shí)驗(yàn)內(nèi)容
用一個m*m長方陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設(shè)計(jì)一個程序?qū)τ谌我庠O(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。
三、程序設(shè)計(jì)
1、概要設(shè)計(jì)
(1)設(shè)定棧的抽象數(shù)據(jù)類型定義ADTstack{
數(shù)據(jù)對象:D={ai|ai屬于charset,i=1、2…n,n>=0}
數(shù)據(jù)關(guān)系:R={|ai-1,ai屬于D,i=2,3,…n}
基本操作:
Initstack(//迷宮中的行
intcol;//......的列
}posType;//坐標(biāo)
(2)迷宮類型:
typedefstruct{
intm,n;
intarr[RAnge][RAnge];
}mazeType;//迷宮類型
voidInitmaze(mazeType//當(dāng)前位置在路徑上的"序號"
posTypeseat;//當(dāng)前的坐標(biāo)位置
DirectiveTypedi;//往下一個坐標(biāo)位置的方向
}selemType;//棧的元素類型
typedefstruct{
selemType*base;
selemType*top;
intstacksize;
}sqstack;
棧的基本操作設(shè)置如下:
VoidInitstack(sqstack
posTypecurpos=start;
intcurstep=1;//探索第一部
do{
if(pass(maze,curpos)){//如果當(dāng)前位置可以通過,即是未曾走到的通道塊
Footprint(maze,curpos);//留下足跡
e=creat
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版國際貿(mào)易實(shí)務(wù)培訓(xùn)課程及知識點(diǎn)拓展合同3篇
- 2024年海洋知識競賽題庫及答案(共140題)
- 2024年縣鄉(xiāng)教師選調(diào)進(jìn)城考試《教育心理學(xué)》題庫及參考答案(基礎(chǔ)題)
- 2025年學(xué)院衛(wèi)生工作計(jì)劃例文
- 2025年度一年級班主任工作計(jì)劃
- 2024年末財務(wù)會計(jì)個人總結(jié)參考(31篇)
- 2025年平安單位創(chuàng)建工作計(jì)劃范例
- Unit 3 All about me Lesson 3 說課稿 2024-2025學(xué)年冀教版(2024)七年級英語上冊
- 2025年春學(xué)期小學(xué)安全工作計(jì)劃
- 三步計(jì)算式題(說課稿)-2024-2025學(xué)年四年級上冊數(shù)學(xué)滬教版
- 論藥品管理在藥品安全中的重要性
- 河北省唐山市2023-2024學(xué)年高一上學(xué)期1月期末考試物理試題(含答案解析)
- 大學(xué)宣傳部工作總結(jié)學(xué)生會
- 2024年永州職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 藥物分離與純化技術(shù)
- 餐廳各類食材原材料供貨驗(yàn)收標(biāo)準(zhǔn)
- 物理實(shí)驗(yàn):測量電容器的電容和電荷量
- 免疫相關(guān)不良反應(yīng)的預(yù)防和處理
- 【區(qū)域開發(fā)戰(zhàn)略中環(huán)境保護(hù)政策的現(xiàn)存問題及優(yōu)化建議分析6800字(論文)】
- 新型農(nóng)村集體經(jīng)濟(jì)研究綜述
- 人教版數(shù)學(xué)八年級上冊第十一章 三角形 作業(yè)設(shè)計(jì) 教案(含答案)
評論
0/150
提交評論