- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计报告-迷宫求解(递归与非递归)[精品]
《数据结构》课程设计
迷宫求解
班级:
学号:
姓名:
指导老师:
迷宫求解
问题描述
输入一个任意大小的迷宫数据,用递归和非递归两种方法求出一条走出迷宫的路径,并将路径输出。
设计思路
从入口出发,按某一方向向前探索,若能走通并且未走过,即某处可以到达,则到达新点,否则试探下一个方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到找到一条通路,或无路可走又返回入口点。
在求解过程中,为了保证在到达某一点后不能向前继续行走(无路)时,能正确返回前一点以便继续从下一个方向向前试探,则需要用一个栈(递归不需要)保存所能够到达的每一点的下标及从该点前进的方向。设迷宫为m行n列,利用maze[m][n]来表示一个迷宫,maze[i][j]=0或1;其中:0表示通路,1表示不通,当从某点向下试探时,中间点有四个方向可以试探,而四个角点有两个方向,其他边缘点有三个方向,为使问题简单化,用maze[m+2][n+2]来表示迷宫,而迷宫的四周的值全部为1,这样做使问题简单了,每个点的试探方向全部为4,不用再判断当前点的试探方向有几个。
数据结构设计
在上述表示迷宫的情况下,每个点有4个方向去试探,如当前点的坐标(x,y),与其相邻的4个点的坐标都可根据与该点的相邻方位而得到。因为出口在(m,n),因此试探顺序规定为:从当前位置向前试探的方向为从正东沿顺时针方向进行。为了简化问题,方便求出新点的坐标,将从正东开始沿顺时针进行的4个方向的坐标增量放在一个结构数组move[4]中,在move数组中,每个元素有两个域组成,x为横坐标增量,y为纵坐标增量。这样对move设计会很方便地求出从某点(x,y)按某一方向v(0=v=3)到达的新点(i,j)的坐标:i=x+move[v].x;j=y+move[v].y;
当到达了某点而无路可走时需返回前一点,再从前一点开始向下一个方向继续试探。因此,压入栈中的不仅是顺序到达的各点的坐标,而且还要有从前一点到达本点的方向。栈中元素是一个由行、列、方向组成。具体结构定义如下:
#define m 3
#define n 3
typedef struct{
int x,y;
}item; /*路线移动的方向坐标,x为横向,y纵向*/
item move[4];(递归只需定义到这里)
typedef struct{
int x,y,d;
}Datatype; /*路线移动的方向坐标,x为横坐标,y为总坐标*/
typedef struct{
Datatype data[MAXSIZE]; /*存储路线移动的方向坐标*/
int top;
}SeqStack,*PSeqStack;
功能函数设计
迷宫栈的实现函数mazepath()
迷宫递归的实现函数path()
为了防止重复达到某点,以避免发生死循环,每次达到了某点(i,j)后,改变maze[i][j]的值,迷宫栈的实现直接置-1,算法结束前恢复原迷宫;而迷宫递归是将当前值置为已走的步骤,这样输出时对走过的路更显而易见。
栈的函数设计:
栈的初始化函数 Init_SeqStack()
判栈空 Empty_SeqStack()
入栈函数 Push_SeqStack()
出栈函数 Pop_SeqStack()
取栈顶函数 GetTop_SeqStack()
销毁栈 Destroy_SeqStack()
程序代码
迷宫栈:
#includestdio.h
#includestdlib.h
#define MAXSIZE 100
#define m 3
#define n 3 /*定义迷宫的行数和列数,可更改*/
typedef struct{
int x,y;
}item;
item move[4]; /*路线移动的方向坐标*/
typedef struct{
int x,y,d;
}Datatype; /*横纵坐标及方向*/
typedef struct{
Datatype data[MAXSIZE];
int top;
}SeqStack,*PSeqStack; /*定义栈*/
PSeqStack Init_SeqStack(void) /*初始化栈*/
{
您可能关注的文档
- 数学课件北师大版八年级下 菱形[精品].ppt
- 数学:9.2《单项式乘多项式》课件(苏科版七年级下)[精品].ppt
- 数学:2014广东高考文科数学试卷及答案解析(WORD版)[精品].doc
- 数学阅读理解问题 浙教版 中考专题讲座 初中数学课件,数学课件,数学,课件[精品].ppt
- 数形结合思想在小学低段数学教学中的应用 毕业论文[精品].doc
- 数学本科毕业论文关于数学教学方法的调查研究[精品].doc
- 数形结合思想及其在教学中的应用 毕业论文[精品].doc
- 数据库 校园小商品交易系统设计[精品].doc
- 数据库—人力资源管理系统[精品].doc
- 数学专业 毕业设计论文 中英文 外文 文献 资料 翻译[精品].doc
- 2025年小学教师招聘教育理论综合基础知识题库及答案宝典.doc
- 2025年如何在30天内高效备战大学英语四级考试?.doc
- 2025年刑事诉讼法深度解析与备考策略全书.doc
- 2025年司法考试备考黄金法则考前必记通关要点.doc
- 2025年农村信用社非信贷资产风险分类管理策略与实施细则解析.doc
- 2025年高等教育自学考试审计学模拟试题及答案详解汇编.docx
- 2025年内蒙古政法干警申论仿真模拟试卷金牌特训版.docx
- 开学第一课:《哪吒2》经典台词激励 课件 -2024-2025学年高中下学期主题班会.pptx
- 热点01 现象级电影哪吒之魔童闹海地理考察(解析版).docx
- 高中英语外刊精读——外国博主狂赞《哪吒2》:颠覆神话!课件-2025届高三下学期英语一轮复习专项.pptx
文档评论(0)