- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法实验报告基于栈的C语言迷宫问题与实现问题描述多年以来,迷宫问题一直是令人感兴趣的题目。实验心理学家训练老鼠在迷宫中寻找食物。许多神秘主义小说家也曾经把英国乡村花园迷宫作为谋杀现场。于是,老鼠过迷宫问题就此产生,这是一个很有趣的计算机问题,主要利用 “栈”是老鼠通过尝试的办法从入口穿过迷宫走到出口。迷宫只有两个门,一个叫做入口,另一个叫做出口。把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫。迷宫中设置很多隔壁,对前进方向形成了多处障碍,在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口。求解迷宫问题,即找出从入口到出口的路径。一个迷宫可用上图所示方阵[m,n]表示,0表示能通过,1 表示不能通过。现假设耗子从左上角[1,1]进入迷宫,编写算法,寻求一条从右下角[m,n] 出去的路径。下图是一个迷宫的示意图:迷宫示意图算法基本思想迷宫求解问题是栈的一个典型应用。基本算法思想是:在某个点上,按照一定的顺序(在本程序中顺序为上、右、下、左)对周围的墙、路进行判断(在本程序中分别用1、0)代替,若周围某个位置为0,则移动到该点上,再进行下一次判断;若周围的位置都为1(即没有通路),则一步步原路返回并判断有无其他通路,然后再次进行相同的判断,直到走到终点为止,或者确认没有任何通路后终止程序。要实现上述算法,需要用到栈的思想。栈里面压的是走过的路径,若遇到死路,则将该位置(在栈的顶层)弹出,再进行下一次判断;若遇到通路,则将该位置压栈并进行下一次判断。如此反复循环,直到程序结束。此时,若迷宫有通路,则栈中存储的是迷宫通路坐标的倒序排列,再把所有坐标顺序打印后,即可得到正确的迷宫通路。程序具体部分的说明迷宫的生成根据题目的要求,迷宫的大小是自定义输入的。所以在程序中用malloc申请动态二维数组。数组中的元素为随机生成的0、1。数组周围一圈的元素全部定义为1,以表示边界。栈的C语言实现为了实现栈的功能,即清空、压栈、弹出、返回栈顶元素,在程序中编写了相应的函数。MakeNULL 清空栈Push 将横、纵坐标压栈Topx 返回栈顶存储的横坐标Topy 返回栈顶存储的纵坐标Pop 弹出栈顶元素具体的判断算法当位置坐标(程序中为X Y)移到某一位置时,将这个位置的值赋值为1并压栈,以说明该点已经走过。接着依次判断该点的上、右、下、左是否为0,若有一方为0,则移动到该位置上,进行下次判断;若为周围位置全部是1,则将该点压栈后不断弹出,每次弹出时判断栈顶元素(即走过的路)周围有无其他通路。如果有的话,则选择该方向继续走下去;如果栈已经为空仍然没有找到出路,则迷宫没有出口程序结束。当X Y走到出口坐标时,程序判断部分结束。栈里面存储的是每个走过的点的坐标,将这些横纵坐标分别存储在两个数组中,最后将数组中的坐标元素倒序输出,即得到了完整的路径。程序源代码及注释// Maze.cpp : 定义控制台应用程序的入口点。//#includestdafx.h#includestdio.h#includestring.h#includemalloc.h#includestdlib.h#includetime.htypedefint Elementtype;struct node{Elementtype val1;Elementtype val2;node *next;};//定义结构体typedef node *MAZE;void MakeNull(MAZE S);void Push(Elementtype x,Elementtype y, MAZE S);void Pop(MAZE S);Elementtype Topx(MAZE S);Elementtype Topy(MAZE S);//申明函数int _tmain(int argc, _TCHAR* argv[]){int **p,*q,*x1,*y1,i,j,k,n1,n2,m1,m2,l,w,max;int x,y;int a,b,c,d; printf(输入迷宫长度及宽度l和w\n); scanf(%d %d,l,w);getchar();n1=w+2;n2=l+2;//为迷宫加上边界max=n1*n2; p=(int**)malloc(n1*sizeof(int));for(i=0;in1;i++) p[i]=(int *)malloc(n2*sizeof(int));//生成二维动态数组 srand(time(NULL));x1=(int*)malloc(max*sizeof(int));//生成动态数组用于存储路径y1=(int *)malloc(max*sizeof(int));//生成动态数组用于存储路径for(i=0;imax;i
您可能关注的文档
- 基于嵌入式指纹识别系统.doc
- 基于嵌入式的智能泵站设计.doc
- 基于嵌入式系统实时交互的手势识别方法.doc
- 基于嵌入式的温度传感器的设计.doc
- 基于嵌入式系统的LCD图形显示设计和实现.doc
- 基于嵌入式系统的GPRS数据终端的研究.doc
- 基于嵌入式系统的一种居民小区安全监控系统.doc
- 基于嵌入式系统的人工生命动画引擎关键技术研究.doc
- 基于嵌入式系统的LCD电子时钟设计.doc
- 基于嵌入式系统的数据监控系统.doc
- 8 黄山奇石(第二课时)课件(共22张PPT).pptx
- 22《纸船和风筝》教学课件(共31张PPT).pptx
- 17 松鼠 课件(共23张PPT).pptx
- 23《海底世界》课件(共28张PPT).pptx
- 21《大自然的声音》课件(共18张PPT).pptx
- 第12课《词四首——江城子 密州出猎》课件 2025—2026学年统编版语文九年级下册.pptx
- 第2课《济南的冬天》课件(共42张PPT) 2024—2025学年统编版语文七年级上册.pptx
- 17 跳水 第二课时 课件(共18张PPT).pptx
- 第六单元课外古诗词诵读《过松源晨炊漆公、约客》课件 统编版语文七年级下册.pptx
- 统编版六年级语文上册 22《文言文二则》课件(共27张PPT).pptx
最近下载
- TCACM 009-2016元胡止痛片优质产品质量标准.pdf VIP
- 声乐正谱伴奏 黑雾 降E.pdf VIP
- 三年(2023-2025)高考地理真题分类汇编:专题12 交通(全国通用)(原卷版).docx VIP
- 2025至2030智能道路检测车行业发展趋势分析与未来投资战略咨询研究报告.docx
- 内科三基试题(含参考答案).docx VIP
- 中国建设工程鲁班奖(国家优质工程)复查工作准则(试行).pdf VIP
- 手术室感染暴发应急预案与处置流程查房.pptx VIP
- 凝结水混床树脂和普通混床树脂性能指标.doc VIP
- 军事理论全部题库及答案.doc
- 2025年宠物鲜食配行业发展趋势分析报告.docx VIP
原创力文档


文档评论(0)