ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:93.68KB ,
资源ID:19904706      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19904706.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构程序设计课题文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构程序设计课题文档格式.docx

1、(i,j)指示迷宫中的一个坐标,di表示走到下一坐标的方向,di的取值为0、1、2、3分别表示北、东、南、西。(3)若设定的迷宫存在通路,则以方阵形式将迷宫及其通路输出到标准输出文件上,对于迷宫中的每个方块,有上下左右4个方块相邻,第i行第j列的当前方块的位置记为(i,j),规定上方方块为方位0,并按顺时针方向递增编号。在试探过程中,假设按从方位0到方位3的顺序查找下一个可走的方块。(4)先将入口进栈(其初始方位设置为-1),在栈不空时循环:取栈顶方块(不退栈),若该方块是出口,则输出栈中所有方块即为路径,否则,找下一个可走的相邻方块,若不存在这样的方块,说明当前路径不可能走通,则回溯。也就是

2、恢复当前方块为0后退栈;若存在这样的方块,则将这个可走的相邻方块进栈(其初始方位设置为-1)。3算法的设计3.1 定义坐标(X,Y)#includefstreamusing namespace std;struct Coor int row; int column; int direction;3.2 定义方向struct Move 3.3 定义/链表结点struct LinkNode Coor data; LinkNode *next;3.4 定义栈class stackprivate: LinkNode *top;public: stack(); stack(); void Push(Co

3、or data); Coor Pop(); Coor GetPop(); void Clear(); bool IsEmpty();3.5 定义迷宫定义移动的4个方向Move move4=0,1,1,0,0,-1,-1,0;6、几个函数功能的描述: /构造函数,置空栈 /析构函数 /把元素data压入栈中 /使栈顶元素出栈 /取出栈顶元素 /把栈清空 /判断栈是否为空bool Mazepath(int *maze,int m,int n); /寻找迷宫maze中从(0,0)到(m,n)的路径 /到则返回true,否则返回falsevoid PrintPath(stack p); /输出迷宫的路

4、径void PrintPath2(int m,int n,stack p,int *maze); /输出路径void Restore(int *maze,int m,int n); /恢复迷4各模块的伪码算法4.1 根据输入产生一个8*8的迷宫m=a; n=b; maze=new int *m+2; /申请长度等于行数加2的二级指针 for(i= 0;im+2;i+) /申请每个二维指针的空间 mazei=new intn+2; for(i=1;=m;i+) for(j=1;jmazeij; cout是否保存新迷宫?n;用Y或y表示保存、N或n表示不保存 n char choose;choos

5、e; if(choose=Y|choose=y) char ch; ofstream fop(Newtest.txt); for(i=1;i+) for(j=1; ch=0+mazeij; fopch; fopendl; flush(cout); fop.close(); /给迷宫的四周加一堵墙,即把迷宫四周定义为1 for(i=0; mazei0=mazein+1=1;n+2; maze0i=mazem+1i=1; for(int p=0;p+p) for(int q=0;q=n+2;+q) if(mazepq=0) cout=1) cout return maze; /返回存贮迷宫的二维指

6、针maze4.2 探索路径函数bool Mazepath(int *maze,int m,int n) stack q,p; /定义栈p、q,分别存探索迷宫的存储和路径过程 Coor Temp1,Temp2; int row,column,loop; Temp1.row=1; Temp1.column=1; q.Push(Temp1); /将入口位置入栈 p.Push(Temp1); maze11=8; /标志入口位置已到达过 while(!q.IsEmpty() /栈q非空,则反复探索 Temp2=q.GetPop(); /获取栈顶元素 if(!(p.GetPop().row=q.GetPo

7、p().row&p.GetPop().column=q.GetPop().column) p.Push(Temp2); /如果有新位置入栈,则把上一个探索的位置存入栈p for(loop=0;loop4;loop+) /探索当前位置的4个相邻位置 row=Temp2.row+moveloop.row; /计算出新位置x位置值 column=Temp2.column+moveloop.column; /计算出新位置y位置值 if(mazerowcolumn=0) /判断新位置是否可达 Temp1.row=row; Temp1.column=column; mazerowcolumn=8; /标志

8、新位置已到达过 q.Push(Temp1); /新位置入栈 if(row=(m)&(column=(n) /成功到达出口 Temp1.row=m; Temp1.column=n; Temp1.direction=0; p.Push(Temp1); /把最后一个位置入栈 char choose; cout if(choose=1) PrintPath(p); /坐标显示输出 Restore(maze,m,n); else PrintPath2(m,n,p,maze); /矩阵显示输出 return 1; /表示成功找到路径 if(p.GetPop().row=q.GetPop().row&p.G

9、etPop().column=q.GetPop().column) /如果没有新位置入栈,则返回到上一个位置 p.Pop(); q.Pop(); return 0; /表示查找失败,即迷宫无路经4.3 输出迷宫void PrintPath(stack p) /输出路径迷宫的路径为n括号内的内容分别表示为(行坐标,列坐标,数字化方向,方向)n stack t; /定义一个栈,按从入口到出口存取路径 int a,b; LinkNode *temp; temp=new LinkNode; /申请空间 temp-data=p.Pop(); /取栈p的顶点元素,即第一个位置 t.Push(temp-da

10、ta); /第一个位置入栈t delete temp; /释放空间p.IsEmpty() /栈p非空,则反复转移 temp=new LinkNode; temp- /获取下一个位置 /得到行走方向 a=t.GetPop().row-temp-data.row; /行坐标方向 b=t.GetPop().column-temp-data.column; /列坐标方向 if(a=1) temp-data.direction=1; /方向向下,用1表示 else if(b=1) temp-data.direction=2; /方向向右,用2表示 else if(a=-1) temp-data.dire

11、ction=3; /方向向上,用3表示 else if(b=-1) temp-data.direction=4; /方向向左,用4表示 t.Push(temp- /把新位置入栈 delete temp;坐标(row,column,direction)中x在指向当前位置所在的行数,y指向当前位置所在的列数,direction表示下一位置走向。 /输出路径,包括行坐标,列坐标,下一个位置方向t.IsEmpty() /栈非空,继续输出 data=t.Pop();(data.row,data.columndata.direction, /输出行坐标,列坐标 switch(data.direction)

12、 /输出相应的方向 case 1:cout)nbreak; case 2:)n case 3:)n case 4:)n case 0:)nvoid PrintPath2(int m,int n,stack p,int *maze) /输出路径 for (int i = 0; i m+2; +i ) for (int j = 0; j n+2; +j) cout mazeij cout data=x;next=top; top=TempNode;Coor stack:Pop() /使栈顶元素出栈 Coor Temp; TempNode=top; top=top-next; Temp=TempNo

13、de-data; delete TempNode; return Temp;GetPop() /取出栈顶元素 return top-Clear() /把栈清空bool stack:IsEmpty() if(top=NULL) return true; else return false; /定义移动的4个方向 /恢复迷宫int* GetMaze(int &m,int &n); /获取迷宫(可从文件中读取,也可输入) /返回存取迷宫的二维指针int main() system(color f5 int m=0,n=0; int *maze; /定义二维指针存取迷宫 cout ntt*欢迎使用迷宫模拟程序* tt 14级计算机物联网班 tt 鲁向阳 肖吟月 tt 学号:14450139 14450132 maze=GetMaze(m,n); /调用GetMaze(int &n)函数,得到迷宫 if(Mazepath(maze,m,n) /调用Mazepath(int *maze,int m,int n)函数获取路径迷宫路径探索成功! else cout=ch mazeij=ch- /把数字字符转化为数字,并存到指针里mazeijb;请输入迷宫内容:(0表示通路,1表示不连通。中间用空格键分开)n m=a; maze=new

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1