#include <stdio.h>
#include<stdlib.h>
#define m 6
#define n 8
#define MAXSIZE 100
typedef struct
{
int x,y,d;//d代表(x,y)下一步所走的方向
} DataType;
typedef struct
{
DataType data[MAXSIZE];
int top;
}SeqStack,*PSeqStack;
typedef struck
{
int x,y;
}item move[4]={{0,1},{1,0},{0,-1},{-1,0}};
PSeqStack Init_SeqStack(void)
{
PSeqStack S;
S=(PSeqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
return (S);
}
Empty_SeqStack(PSeqStack S)
{
return((S->top)==-1);
}
int Push_SeqStack(PSeqStack S,DataType m)
{
(S->top)++;
S->data[S->top]=m;
}
int Pop_SeqStack(PSeqStack S,DataType *m)
{
if(Empty(S))
{
printf("stack is empty");
return (0);
}
else
{
*m=S->data[S->top];
(S->top)--;
return (1);
}
}
Destory_SeqStack(PSeqStack *S)
{
free(S);
S=NULL;
}
int Mazepath(int maze[m+2][n+2],int x0,int y0,item move[4])
{
PSeqStack S;
DateType temp;
S=Init_SeqStack();
int x,y,d,i,j;
x=x0;y=y0;d=-1;
temp.x=x;temp.y=y;temp.d=d;
Push_SeqStack(S,temp);
while(!Empty_SeqStack(S))
{
Pop_SeqStack(S,&temp);
x=temp.x;y=temp.y;d=temp.d+1;
while(d<4)
{
i=x+move[d].x;j=y+move[d].y;
if(maze[i][j]==0)
{
temp.x=x;temp.y=y;temp.d=d;
Pust_SeqStack(S,temp);
x=i;y=j;maze[i][j]=-1;
if(i==m&&j==n)
{
while(!Empty(S))
{
Pop_SeqStack(S,&temp);
printf("(%d,%d)<-"temp.x,temp.y);
}
Destory_SeqStack(&S);
return 1;
}
else
d=0;
}
else
d++;
}
}
Destory_SeqStack(S);
return (0);
}