数据结构迷宫课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中科技大学文华学院数据结构课程设计
报告
学部:信息科学与技术学部
专业班级:09级通信工程2班
姓名:沈弋轩
学号: 0901********
指导教师:张采芳老师
时间:2011.11.18
实验一栈和队列的应用
一、实验目的
熟悉栈的定义和栈的基本操作. 熟悉队列的定义和栈的基本操作. 掌握递归和非递归算法的实现技术和实际应用. 加深对栈结构的理解,培养解决实际问题的编程能力。
二、实验内容
完成迷宫问题求解。
三、实验基本原理
所谓求迷宫问题,就是在一个指定的迷宫中求出从入口到出口的路径,在求解时,我们先从入口出发,顺某一方向向前试探,若能走通,则继续往前走,否则,沿原路退回,换一个方向再继续试探,直至所有可能的通路都试探完为止。
四、源程序及注释
#include
#define Maxsize 500
#define M 4
#define N 4
struct
{
int i,j,di; //当前方块行号、列号、下一可走相邻方位的方位号
}qu[Maxsize],path[Maxsize]; //定义栈、最小路径存放
int top=-1; //初始化栈顶指针
int mgpath(int xi,int yi,int xe,int ye,int mg[M+2][N+2]) //求解路径为(xi.yi)->(xe,ye)
{ //此处放置前面顺序栈的定义
int num=0;
int i,j,k,di,find,minlenth=Maxsize;
top++; //初始化栈qu[top].i=xi;
qu[top].j=yi; //取栈顶方块qu[top].di=-1; //找到了出口,输出路径
mg[1][1]=-1;
printf("迷宫路径如下:\n");
while(top>-1)//栈不为空时循环
{
i=qu[top].i;j=qu[top].j;
di=qu[top].di;
if(i==xe&&j==ye)
{num++;
printf("第%d条路径:\n",num);
for(k=0;k<=top;k++)
{
path[k]=qu[k];
printf("\t(%d,%d)",qu[k].i,qu[k].j);
if((k+1)%5==0) //每输出5个方块后换一行
printf("\n");
}
printf("\n\n");
mg[qu[top].i][qu[top].j]=0;
if(top+1 { minlenth=top+1; for(int c=0;c<=top;c++) path[k]=qu[k]; } top--; i=qu[top].i;j=qu[top].j;di=qu[top].di; } find=0; while(di<=4&&find==0) //找(i,j)下一可走方块 { di++; //找下一方位 switch(di) { case 0: i=qu[top].i-1; j=qu[top].j;break; case 1: i=qu[top].i; j=qu[top].j+1;break; case 2: i=qu[top].i+1; j=qu[top].j;break; case 3: i=qu[top].i; j=qu[top].j-1;break; } if(mg[i][j]==0) find=1; //找到下一可走相邻方块 } if(find==1) //找到一可走相邻方块 { qu[top].di=di; //修改原栈顶元素di top++; //将可走相邻方块进栈 qu[top].i=i;qu[top].j=j;qu[top].di=-1; mg[i][j]=-1; //值制为-1,避免重复走到该方块} else //没有相邻方块可走,退出栈 { mg[qu[top].i][qu[top].j]=0; //该位置变为其他路径可走方向 top--; //该方块退栈 } } printf("路径条数:%d\n",num); printf("\n最短路径长度为:%d\n",minlenth); printf("\n最短路径为:\n"); for(k=0;k<=minlenth;k++) { printf("\t(%d,%d)",path[k].i,path[k].j); if((k+1)%5==0) printf("\n"); } printf("\n"); return(0); //没有可走路径,返回0 } void main() { int i,j; int mg[M+2][N+2]={ {1,1,1,1,1,1}, {1,0,0,0,1,1}, {1,0,1,0,0,1}, {1,0,0,0,1,1},