数据结构迷宫求解,出现问题,求大神解答!!谢谢
编译程序时,问题如图所示#include<stdio.h>
#include<stdlib.h>
#define STACK_SIZE 100
#define EX_SIZE 10
#define COLUMN 8
#define ROW 8
typedef int Status;
/***************结构体定义*****************/
typedef struct{ //迷宫数据
char ma[ROW][COLUMN];
int row;
int column;
}MazeType;
typedef struct{ //迷宫位置坐标
int x;
int y;
}PosType;
typedef struct{
int ord; //路径上的序号
PosType seat; //坐标位置
int way; //探索下一个方块的方向
}ElemType;
typedef struct{ //栈结构
ElemType *base;
ElemType *top;
int stacksize;
}Sqstack;
/*********************函数定义**************/
Status InitStack(Sqstack &S) //构造一个空栈
{
S.base=(ElemType *)malloc(STACK_SIZE*sizeof(int));
if(!S.base)
{
printf("申请内存空间失败!");
return 0;
}
S.top=S.base;
S.stacksize=STACK_SIZE;
return 1;
}
Status Push(Sqstack &S,ElemType e) //入栈
{
*S.top++=e;
return 1;
}
Status Gettop(Sqstack &S) //获取栈顶元素
{
ElemType e;
if(S.top==S.base) return 0;
e=*(S.top-1);
return 1;
}
Status Pop(Sqstack &S,ElemType &e) //删除栈顶元素
{
if(S.top==S.base) return 0;
e=*--S.top;
return 1;
}
Status IsEmpty(Sqstack &S) //判断栈是否为空
{
if(S.top==S.base) return 1;
else return 0;
}
Status InitMaze(MazeType &M) //初始化迷宫
{
int i,j;
/*
M.row=8;
M.column=8; //迷宫行和列数*/
for(i=0;i<8;i++){//迷宫行外墙
M.ma[0][i]='#';
M.ma[7][i]='#';
}
for(i=0;i<8;i++){//迷宫列外墙
M.ma[i][0]='#';
M.ma[i][7]='#';
}
//迷宫图案
M.ma[1][1]=' ';M.ma[1][2]='#';M.ma[1][3]='#';M.ma[1][4]='#';M.ma[1][5]=' ';M.ma[1][6]=' ';
M.ma[2][1]=' ';M.ma[2][2]='#';M.ma[2][3]='#';M.ma[2][4]='#';M.ma[2][5]=' ';M.ma[2][6]=' ';
M.ma[3][1]=' ';M.ma[3][2]=' ';M.ma[3][3]=' ';M.ma[3][4]=' ';M.ma[3][5]=' ';M.ma[3][6]='#';
M.ma[4][1]=' ';M.ma[4][2]='#';M.ma[4][3]='#';M.ma[4][4]=' ';M.ma[4][5]=' ';M.ma[4][6]=' ';
M.ma[5][1]=' ';M.ma[5][2]='#';M.ma[5][3]='#';M.ma[5][4]='#';M.ma[5][5]=' ';M.ma[5][6]=' ';
M.ma[6][1]=' ';M.ma[6][2]=' ';M.ma[6][3]=' ';M.ma[6][4]=' ';M.ma[6][5]=' ';M.ma[6][6]=' ';
/*
for(i=1;i<8;i++)
for(j=1;j<8;j++)
{
if(' '==M.ma[i][j])
M.ma[i][j]='1';//初始化迷宫
}*/
return 1;
}
Status Pass(MazeType &M,PosType curpos) //判断是否能通过
{
if(' '==M.ma[curpos.x][curpos.y])
return 1;
else
return 0;
}
Status FootPrint(MazeType &M,PosType curpos) //打上通过的标记 “*”
{
M.ma[curpos.x][curpos.y]='*';
return 1;
}
PosType NextPos(PosType curpos,int i) //往下一个方向探索
{
PosType pos=curpos;
switch(i)
{
case 1:pos.y+=1;
break;
case 2:pos.x+=1;
break;
case 3:pos.y-=1;
break;
case 4:pos.x-=1;
break;
default:exit(0);
return pos;
}
}
Status MarkPrint(MazeType &M,PosType curpos)
{
M.ma[curpos.x][curpos.y]='@';
return 1;
}
Status PrintMaze(MazeType &M) //输出迷宫
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
printf("%c",M.ma[i][j]);
}
printf("\n");
}
return 1;
}
Status MazePath(MazeType M,PosType start,PosType end) //求一条迷宫路径
{
Sqstack S;
PosType curpos;
int curstep=1;
ElemType e;
InitStack(S); //构造空栈
curpos=start; //最开始在入口位置
do
{
if(Pass(M,curpos))
{
FootPrint(M,curpos);
e.ord=curstep;
e.seat=curpos;
e.way=1;
Push(S,e);
if(curpos.x==end.x&&curpos.y==end.y) return 1;
curpos=NextPos(curpos,1);
curstep++;
}
else
{
if(!IsEmpty(S))
{
Pop(S,e);
while(e.way==4&&!IsEmpty(S))
{
MarkPrint(M,e.seat);
Pop(S,e);
}
if(e.way<4)
{
e.way++;
Push(S,e);
curpos=NextPos(e.seat,e.way);
}
}
}
}while(!IsEmpty(S));
return 1;
}
int main()
{
MazeType maze;
maze.row=8;
maze.column=8;
InitMaze(maze);
PosType start,end;
start.x=1;
start.y=1;
end.x=6;
end.y=6;
PrintMaze(maze);
MazePath(maze,start,end);
PrintMaze(maze);
system("pause");
return 0;
}