1 / 19
文档名称:

迷宫实验报告.doc

格式:doc   大小:126KB   页数:19页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

迷宫实验报告.doc

上传人:薄荷牛奶 2022/4/27 文件大小:126 KB

下载得到文件列表

迷宫实验报告.doc

相关文档

文档介绍

文档介绍:实验内容
迷宫问题。假设迷宫由m行n列构成,有一个出口和一个入口,入口坐标为〔1,1〕,出口坐标为〔m,n〕,试设计并验证以下算法:找出一条从入口通往出口的路径,或报告一个“无法通过”的信息。
〔1〕用C语言实现顺序存储队列上的基本操作h,row,col)
操作结果:假设〔row,col〕位置是路径Path中的一个点,则返回TRUE
PrintMaze(M)
初始条件:迷宫M已存在
操作结果:输出字符标示的迷宫
MazePath(M,&Path)
初始条件:迷宫M已存在
操作结果:搜索迷宫,用path返回搜索所得路径。如不存在,返回0
PrintPath(M,Path)
初始条件:迷宫M已存在
操作结果:迷宫M存在可行路径则将迷宫M及相应最短路径一起打印输出
}ADT MAZE;
⒊ 本程序模块结构
⑴ 主函数模块
void main(){
初始化迷宫和栈;
创建迷宫;
输出迷宫;
搜索路径;
输出路径;

⑵ 栈模块——实现栈抽象数据类型;
⑶ 迷宫模块——实现迷宫抽象数据类型;
各模块之间的调用关系如下:
主程序模块      
迷宫模块

栈模块
详细设计
1、基本数据类型操作
⑴ 栈模块
① typedef struct{
int order;
Position seat;
int direction;
}SElemType;//步数、方向及位置
//栈定义
② typedef struct lnode{
SElemType *base;
SElemType *top;//设两指针便于判断栈是否为空
int stacksize;//栈当前可使用的最大容量
}SqStack;
③ 参数设置:
#define STACK_INIT_SIZE 100
#define STACKINCRENT 10
//----------基本操作的算法描述--------------------
Status InitStack(SqStack &s){ // 构造一个空栈
=(SelemType )malloc(STACK_INIT_SIZE*SizeOf(SelemType));
if(!)exit(OVERLOW); // 存储分配失败
=;
=STACK_INIT_SIZE;
return ok;
}
Status StackEmpty(Sqstack &S){ // 假设S为空返回TRUE,否则返回FALSE
return ==;
}
Status GetTop(SqStack &S,Selemtype &e){
// 栈不空,用e返回s的栈顶元素及OK,否则返回ERROR
if(==)return ERROR;
e=*(-1);
return ok;
}
Status Push(Sqstack &S,SelemType &e){ // 插入元素e为新的栈顶元素
if(->=){// 栈满追加存储空间
=(SelemType)realloc(,(+STACKICREMENT)Sizeof(Selemtype));
if(!) exit(OVERFLOW) // 存储分配失败
=+; // 确定新的栈顶指针
+=STACKINCREMENT;// 已分配空间增加
}
*++=*e;
return ok;
}
Status Pop(Sqstack &s,SelemType &e){
// 假设栈不变,则删除栈顶元素,用e返回其值及ok,否则false
if(=o=)
return ERROR;
*e=*--; // 顶指针减小,用e返回其数据
return ok;
}
⑵ 迷宫模块:
① 迷宫的数据类型
#define MAXLENGTH 50 // 迷宫的最大长度
#define MAXWIDTH 50 // 屏幕宽度,迷宫的最大宽度
//元素类型
typedef