1.实验名称: 用栈求解迷宫问题中的所有路径及最短路径程序
2.实验内容:
编写一个程序求解迷宫问题,要求输出迷宫的所有路径,并求第一条最短路径长度及最短路径
3.算法及UML图:
void InitStack(SqStack*& s) //初始化栈
{
s = (SqStack*)malloc(sizeof(SqStack));
s->top = -1;
}
void DestroyStack(SqStack*& s) //销毁栈
{
free(s);
}
bool StackEmpty(SqStack *&s) //判断栈是否为空
{
return (s->top == -1);
}
bool Push(SqStack *&s, Elemtype e) //进栈
{
if (s->top == MaxSize - 1)
return false;
s->top++;
s->data[s->top] = e;
return true;
}
bool Pop(SqStack *&s, Elemtype& e) // 出栈
{
if (s->top == -1)
return false;
e = s->data[s->top];
s->top--;
return true;
}
bool GetTop(SqStack *s, Elemtype &e) //取栈顶元素
{
if (s->top == -1)
return false;
e = s->data[s->top];
return true;
}
bool mgpath(int xi, int yi, int xe, int ye)//求解路径为(xi,yi)->(xe,ye)
{
Box path[MaxSize], e;
int i, j, di, i1, j1, k, idx, count; //
bool find, flag;
SqStack *st;
InitStack(st);
e.i = xi; e.j = yi; e.di = -1; //设置e为入口
Push(st, e); //将入口进栈
map[xi][yi] = -1; //将入栈的位置的值置为-1,避免重复走同一方块
idx = 1; //记录迷宫解的条数
flag = false; //默认迷宫没有