迷宫栈解决问题c语言


#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函数的前面。意义是一样的

最后这一段是函数的声明,如果没有函数声明,前面的函数没法对后面定义的函数进行调用!