资源描述:
《栈的基本应用以及迷宫算法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验报告题目:栈的基本应用以及数字进制间转换和迷宫实现一、需求分析1本实验报告包括两个实验,由于运用的数据存储方式不一,为了不被混淆,所以分别在两个工程中加以实现。2在第一个实验中,主要是对栈的一些基本函数方法和应用的实现以及数字进制间的转换,详细情况会在后面的“概要设计”上加以介绍,这里主要介绍迷宫实现的算法。以二维数组maze[10][10]来表示迷宫,其中数值为1表示障碍,不能通过,数值为0表示通道,可以通过。后面再算法实现中有可能讲数组的数值改为2,3等其他数。其中2表示已经走过的通路,用以区分未走的通
2、道。‘3’,‘4’‘5’是为了便于后面的画图。比如,若数值为0,则输出“空格”,数值为1,则输出‘*’,数值为2则输出‘>’,数值为3则输出‘空格’,数值为4则输出‘I’表示入口,数值为5则输出‘O’表示出口。3迷宫我已经构建好,不需要老师自己输入。4迷宫的出入口需要老师自己输入,可以在正确的范围内随便定义。5迷宫的求解结果会有两种表现方式:1)为图形形式2)为文字输出路径形式。其中文字形式是图形形式的再次说明,因为在某些情况下图形很混乱(由于探路算法的按部就班,可能路径会在出口处显示一圈的“>”符号,可能会无
3、法分清具体路径)。6测试数据:入口坐标(1,1)出口左边(8,8),结果为:(由于图形形式在WORD上不好画出,所以在此省略,见谅.)结点是:行:8列:7结点是:行:8列:6结点是:行:8列:5结点是:行:7列:5结点是:行:6列:5结点是:行:6列:4结点是:行:6列:3结点是:行:5列:3结点是:行:5列:2结点是:行:5列:1结点是:行:4列:1结点是:行:3列:1结点是:行:2列:1结点是:行:1列:1二、概要设计1设定栈的抽象数据类型定义以及数字不同进制间的转换的类型:ADTStack{数据对象:D=
4、{ai
5、ai}∈ElemSet,i=1,2,….n,n>=0}数据关系:R1={
6、ai-1,ai∈D,i=2,…,n}基本操作:IntStack(&S)操作结果:构造一个空的栈S。DestroyStack(&S)初始条件:栈S已经存在操作结果:销毁栈S。StackLength(S)初始条件:栈S已经存在操作结果:返回S的长度。StackEmpty(S)初始条件:栈S已经存在。操作结果:若S为空,则返回TRUE,否则返回FALSE。GetTop(S,&e)初始条件:栈S已存在操作结果:若栈S不空,
7、则以e返回栈顶元素。Push(&S,e)初始条件:栈S已经存在。操作结果:在栈S的栈顶插入心的栈顶元素e。StachTraverse(S,visit())初始条件:栈S已存在操作结果:从栈底到栈顶一次对S中的每个元素调用函数visit().Zhuanhuan(intn,intm)初始条件:n,m为正整数操作结果:把十进制的数n转换成m进制的数.}ADTStack2设定迷宫的抽象类型:ADTmaze{数据对象:D={ai,j
8、ai,j∈{‘空格’,’*’,’>’,’I’,’O’},0=
9、0}数据关系:R={ROW,COL}ROW={
10、ai-1,j,ai,j∈D,i=1,…,10,j==1,…,10}COL={
11、ai-1,j,ai,j∈D,i=1,…,10,j==1,…,10}}基本操作:mazePath(maze,direction,x1,y1,x2,y2);初始条件:迷宫maze已经被建立好,二维方向direction已经定义好,x1,x2,y1,y2为自己在cmd界面输入的数值,分别表示出入口的行列值.操作结果:若迷宫存在一条路径,则按照
12、上面所说的显示结果,若不存在则输出“没有找到路径”3本程序主要包含三个模块1)主程序模块:intmain(){初始化;do{接受命令;处理命令;}while(命令!=退出);}2)栈模块——实现栈抽象数据类型3)迷宫算法实现模块——实现迷宫抽象数据类型各模块的调用关系如下:主程序模块迷宫模块栈模块关于迷宫的代码在打包程序中的hanshushixian.cpp中,栈的定义代码在Stack.h中,主程序代码在main.cpp中,这里不在详细介绍.4)数字转换的函数调用关系图:主程序mainInitStackPush
13、GetDestroyStack栈模块(Stack)三、详细设计关于栈的基本应用以及数字进制转换和迷宫的代码分别在打包程序中的hanshushixian.cpp中,栈的定义代码在Stack.h中,主程序代码在main.cpp中,这里不在详细介绍.四、调试分析1本次作业由于内容较多,且难度不低,所以花费了很多时间。特别是迷宫算法的实现,我在网上看了不下4中解法,通过分析最终把它们糅合在一起