- 10
- 0
- 约7.97千字
- 约 14页
- 2019-08-06 发布于江西
- 举报
PAGE
目录
TOC \o 1-2 \h \z \u 一、 系统开发的背景 1
二、 系统分析与设计 1
(一) 系统功能要求 1
(二) 系统模块结构设计 1
三、 系统的设计与实现 2
(一) 栈的基本操作 2
(二) 迷宫算法:path(SeqStack *s) 4
(三) 迷宫路径输出算法:printpath(SeqStack *s) 6
(四) 主函数 7
四、 系统测试 8
(一) 测试主函数迷宫的输入输出 8
(二) 测试迷宫函数和迷宫路径输出函数 8
五、 总结 9
六、 附件(代码) 9
PAGE 13
迷宫与栈问题
系统开发的背景
迷宫问题是心理学中的一个经典问题,一直以来人们乐都此不彼的研究它。 同样利用栈的思想也可以解决迷宫问题。
系统分析与设计
系统功能要求
以一个mXn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出。其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。
系统模块结构设计
通过对系统功能的分析,系统功能如图1所示。
迷宫与栈问题
迷宫与栈问题
栈的基本操作
迷宫算法
主
函数
迷宫路径输出
图1 迷宫与栈问题系统功能图
通过上图的功能分析,把整个系统划分为4个模块:
1、栈的基本操作:该模块主要包括栈的初始化、栈空判别算法、入栈算法、出栈算法;主要通过函数SeqStack *Init_SeqStack()、Empty_SeqStack(SeqStack *s)、Push_SeqStack(SeqStack *s,DateType x)、pop_SeqStack(SeqStack *s,DateType *x)实现;
2、迷宫算法:该模块主要通过函数path(SeqStack *s)实现,
3、迷宫路径输出算法:该模块主要通过函数 printpath(SeqStack *s)实现;
4、主函数:该模块主要是迷宫的输入、打印,以及对以上函数的调用。
系统的设计与实现
栈的基本操作
分析:栈的初始化算法也可理解为置空栈算法:首先建立栈空间,然后初始化栈顶指针。利用if来判断是否申请到足够大的储存空间,然后返回空指针或栈空间地址;栈空判别算法:当栈顶指针指向栈底时,栈为空;入栈算法:入栈时,首先借助if语句判断栈是否满了,栈满时,不能入栈,返回错误代码0,相反,栈顶指针向上移动,将x置于新的栈顶,入栈成功返回成功代码1;出栈算法:出栈时,首先判断栈是否为空,借助于if语句,栈空不能出栈,返回错误代码0,相反,保存栈顶元素值,栈顶指针向下移动 ,栈顶元素存入*x,返回成功代码1;该模块如图2所示:
栈的基本操作
栈的基本操作
栈的初始化
栈空判别算法
入栈操作
出栈操作
图2 栈的基本操作
该模块的具体代码如下所示:
//栈的初始化算法
SeqStack *Init_SeqStack(){
SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));
s-top=0;
return s;
}
//栈空判别算法
int Empty_SeqStack(SeqStack *s){
if(s-top==0) //判断空栈
return 1;
else
return 0;
}
//入栈算法
int Push_SeqStack(SeqStack *s,DateType x){
if(s-top==Maxsize-1) //判断栈满
return 0;
else{
s-top++;
s-data[s-top]=x;
return 1;
}
}
//出栈算法
int pop_SeqStack(SeqStack *s,DateType *x){
if(Empty_SeqStack(s))
return 0;
else{
*x=s-data[s-top];
s-top--;
return 1;
}
}
迷宫算法:path(SeqStack *s)
分析:从迷宫入口出发,按照一定的顺序(在本程序中顺序依次为右、右下、下、左下、左、左上,上、右上)对周围的墙、路进行判断;若周围的位置都为1(即没有通路),则沿原路返回前一点,换下一个方向继续试探,直到所有通路都试探到,或找到一条通路,或无路可走又返回到入口点。在求解过程中,为了保证在到达某一点后不能向前继续行走时,能正确返回前一点,以便继续从下一
原创力文档

文档评论(0)