- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.9迷宫问题
迷宫问题
一.实验目的
[问题描述:
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
实现要求:
实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。
编写递归形式的算法,求得迷宫中所有可能的通路;
以方阵形式输出迷宫及其通路。
[测试数据]
迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口
实现提示:
计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。
3、主函数
三.实验步骤
程序由主函数开始,首先,定义一个二维数组迷宫。选择开始坐标点,然后,开始入栈,利用各个位置的判断循环建立结点,记录各个位置的数据,若走进死胡同则退栈,并且判断是否栈空,找到路径并到达出口后将栈倒置,使其按从入口到出口的顺序输出,之后调用迷宫图案输出函数,使其按要求输出。
四.实验的结果及分析。
1、起点(1 ,1)
2、起点(4 , 1)
五.实验中出现的问题、解决方法和心得体会
主要针对的知识还是对栈和队列知识的应用,开始对栈的构造不清楚,且定义的出栈函数繁琐,定义的各个函数均有逻辑上的小错误。好在后来老师有在数据结构课上简单讲了一下这个算法,所以有了设计的思路。
广东工业大学实验报告
自动化 学院 网络工程 专业(1) 班 学号 3111001299 姓名 刘源彬 成绩评定_______ 教师签名 许亮
实验 2.9 题目 迷宫问题 课程名称 数据结构A
8
struct Stack //构造栈
{
int Maze_x,Maze_y,Maze_z; //定义迷宫X,Y坐标,z方向
Stack * next; //定义栈指针
};
else if(a[i+1][j]==0) //判断下边是否可行
{
push(i,j,2);
i++;
a[i][j] = 2; //标记走过的位置
}
else if(a[i][j-1]==0)//判断左边是否可行
{
push(i,j,3);
j--;
a[i][j] = 2; //标记走过的位置
}
else if(a[i-1][j]==0) //判断上边是否可行
{
push(i,j,4);
i--;
a[i][j] = 2; //标记走过的位置
}
else //四个方向都不可行,退栈
{
int e1,e2;
Stack *p;
p = ps;
ps=ps-next;
e1=p-Maze_x;
e2=p-Maze_y;
a[e1][e2]=3; //标记走过的死胡同坐标
delete p; //删除栈顶元素
i = ps-Maze_x;
j = ps-Maze_y;
if(ps==NULL) //判断栈空否
{
coutno path!endl;
exit(1);
}
}
}
#includeiostream
#includeiomanip
using namespace std;
Stack *ps; //链头指针
void Pop() //出栈函数
{
Stack *p;
p = ps;
ps=ps-next;
delete p;
}
void push(int x,int y,int z) //进栈 函数
{
Stack *t;
t = new Stack;
t-Maze_x = x;
t-Maze_y = y;
t-Maze_z = z;
t-next = ps;
ps = t;
}
void Mazepath(int a[][10],int i,int j) //迷宫路线寻找 函
您可能关注的文档
最近下载
- 《中国共产党纪律处分条例》六大纪律内容提纲(二).pdf VIP
- 电梯安全管理培训感想课件.pptx VIP
- 大载荷无人机应急救援系统技术要求.docx VIP
- 高考语文阅读专题散文阅读练习-(精品·课件).ppt VIP
- sap hanna studio自总结_hana创建用户.pdf VIP
- 系统性红斑狼疮疾病活动度评分表(SLEDAI-2000).docx VIP
- 豪恩汽电首次覆盖报告:智驾感知层国产龙头,新能源与出海打开成长空间.pdf
- 《机井井管标准》SL154-2013.pdf VIP
- 高考语文阅读专题:散文阅读.doc VIP
- 新教科版一年级上册科学《我们知道的植物》ppt教学课件.pptx VIP
文档评论(0)