#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define Maxsize 100
int maze[100][100];
int M,N;
typedef int ElemType;
typedef struct
{
int i;
int j;
int di;
}Box;
typedef struct
{
Box data[Maxsize];
int top;
}StType;
void InitStack(StType*&s);
bool StackEmpty(StType*&s);
bool Push(StType*&s,Box e);
bool Pop(StType*&s,Box&e);
void DestroyStack(StType*&s);
bool GetTop(StType*s,Box&e);
bool mazepath(int xi,int yi,int xe,int ye);
int main()
{
int xs,ys,xe,ye;
scanf("%d%d",&M,&N);
int m=0,n=0;
for(m=0;m<M+2;m++)
{
for(n=0;n<N+2;n++)
{
if(m==0||n==0||m==M+1||n==N+1)
maze[m][n]=1;
else
scanf("%d",&maze[m][n]);
}
}
scanf("%d%d%d%d",&xs,&ys,&xe,&ye);
if(!mazepath(xs,ys,xe,ye))
printf("No Path\n");
return 1;
}
void InitStack(StType*&s)
{
s=(StType*)malloc(sizeof(StType));
s->top=-1;
}
void DestroyStack(StType *&s)
{
free(s);
}
bool Push(StType*&s,Box e)
{
if(s->top==Maxsize-1)
return false;
s->top++;
s->data[s->top]=e;
return true;
}
bool Pop(StType*&s,Box&e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
s->top--;
return true;
}
bool GetTop(StType*s,Box&e)
{
if(s->top==-1)
return false;
e=s->data[s->top];
return true;
}
bool StackEmpty(StType*&s)
{
return(s->top==-1);
}
bool mazepath(int xi,int yi,int xe,int ye)
{
Box path[Maxsize],e;
int i,j,di,il,jl,k,a=0;
bool find;
StType*st;
InitStack(st);
e.i=xi;e.j=yi;e.di=-1;
Push(st,e);
maze[xi][yi]=-1;
while(!StackEmpty(st))
{
GetTop(st,e);
i=e.i;j=e.j;di=e.di;
if(i==xe&&j==ye)
{
k=0;
while(!StackEmpty(st))
{
Pop(st,e);
path[k++]=e;
}
while(a<k)
{
printf("(%d,%d)\t",path[a].i,path[a].j);
if((a+1)%5==0)
printf("\n");
a++;
}
printf("\n");
DestroyStack(st);
return true;
}
find=false;
while(di<4&&!find)
{
di++;
switch(di)
{
case 0:il=i-1;jl=j;break;
case 1:il=i;jl=j+1;break;
case 2:il=i+1;jl=j;break;
case 3:il=i;jl=jl-1;break;
}
if(maze[il][jl]==0)
find=true;
}
if(find)
{
st->data[st->top].di=di;
e.i=il;e.j=jl;e.di=-1;
Push(st,e);
maze[il][jl]=-1;
}
else
{
Pop(st,e);
maze[e.i][e.j]=0;
}
}
DestroyStack(st);
return false;
}
void InitStack(StType*&s);
bool StackEmpty(StType*&s);
bool Push(StType*&s,Box e);
bool Pop(StType*&s,Box&e);
void DestroyStack(StType*&s);
bool GetTop(StType*s,Box&e);
bool mazepath(int xi,int yi,int xe,int ye);
想问一下这段是什么意思呀?是在调用函数吗?那如果没有这段的话,在主函数里应该怎么改呢?麻烦各位神仙帮帮忙
作用是函数声明,如果没有这段。把下面那些函数全都放到main函数的前面。意义是一样的
最后这一段是函数的声明,如果没有函数声明,前面的函数没法对后面定义的函数进行调用!