#include#define M 6
#define N 8
#define max 100
#define Max M*N
typedef struct //定义迷宫内坐标类型
{
int x,y;
}item;
typedef struct //顺序栈元素
{
int x,y,d;//d 下一步方向
}Elemtype;
typedef struct node // 栈的类型定义
{
Elemtype data[max];
int top;
}sqstack;
typedef struct //队列的类型定义
{ int x,y;
int pre;
}ElemType;
typedef struct
{ ElemType elem[Max];
int front,rear;
int len;
}SqQueue;
/* 栈函数 */
void InitStack(sqstack *s)//构造空栈
{
s->top=-1;
}
int Stackempty(sqstack s)//判断栈是否为空
{
if(s.top==-1)
return 1;
else
return 0;
}
void Push(sqstack *s, Elemtype e)//入栈
{
if(s->top==max-1)
{printf("full");return;}
s->top++;
s->data[s->top].x=e.x;
s->data[s->top].y=e.y;
s->data[s->top].d=e.d;
}
int Pop(sqstack *s,Elemtype *e)// 出栈
{
if(s->top==-1){printf("stack is empty\n");return 0;}
e->x=s->data[s->top].x;
e->y=s->data[s->top].y;
e->d=s->data[s->top].d;
s->top--;
}
void InitQueue(SqQueue *q) //队的初始化
{ q->front=q->rear=0;
q->len=0;
}
int QueueEmpty(SqQueue q) //判断队空
{ if (q.len==0)
return 1;
else return 0;
}
void GetHead (SqQueue q,ElemType *e)//读队头元素
{ if (q.len==0)
printf("Queue is empty\n");
else
*e=q.elem[q.front];
}
void EnQueue(SqQueue *q,ElemType e) //入队
{ if(q->len==Max)
printf("Queue is full\n");
else
{q->elem[q->rear].x=e.x;q->elem[q->rear].y=e.y;q->elem[q->rear].pre=e.pre;
q->rear=q->rear+1;
q->len++;
}
}
void DeQueue(SqQueue *q,ElemType *e) //出队
{ if(q->len==0)
printf("Queue is empty\n");
else
{e->x=q->elem[q->rear].x;e->y=q->elem[q->rear].y;e->pre=q->elem[q->rear].pre;
q->front=q->front+1;
q->len--;
}
}
void printpath2(SqQueue q)//输出迷宫路径,队列中保存的就是一条迷宫的通路
{ int i;
i=q.rear-1;
do
{printf("(%d,%d)i=(q.elem[i]).pre;
}
while(i!=-1);
printf("\n");
}
void mazepath2(int maze[M+2][N+2],item move[8]) //队列的迷宫求解
{ SqQueue q;
ElemType head,e;
int x,y,v,i,j;
InitQueue(&q); //队列的初始化
e.x=1;e.y=1;e.pre=-1;
EnQueue (&q,e);
maze[1][1]=-1;
while(!Queue