写了个老鼠走迷宫的代码,结果准备打印出走之前的地图和走之后的地图,不知道为啥,只输出了前一个,而没有后一个。
好心的人帮我看看是怎么回事,不胜感激。
源代码:
#include<iostream>
#define EAST MAZE[x][y+1]
#define WEST MAZE[x][y+1]
#define SOUTH MAZE[x][y+1]
#define NORTH MAZE[x][y+1]
using namespace std;
const int ExitX=8;
const int ExitY=10;
struct list
{
int x,y;
struct list * next;
};
typedef struct list node;
typedef node * link;
int MAZE[10][12]={1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,1,1,1,1,1,1,1,1,
1,1,1,0,1,1,0,0,0,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,0,0,0,0,1,1,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,0,1,1,0,1,1,0,1,1,
1,1,1,1,1,1,0,1,1,0,1,1,
1,1,0,0,0,0,0,0,1,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1};
link push(link stack,int x,int y);
link pop(link stack,int * x,int * y);
int chkExit(int ,int ,int ,int );
int main(void)
{
int i,j;
link path=NULL;
int x=1;
int y=1;
cout<<"[迷宫的路径(0的部分)]"<<endl;
for(i=0;i<10;i++)
{
for(j=0;j<12;j++)
cout<<MAZE[i][j]<<" ";
cout<<endl;
}
while (x<=ExitX && y<ExitY)
{
MAZE[x][y]=2;
if(NORTH==0)
{
x-=1;
path=push(path,x,y);
}
else if(SOUTH==0)
{
x+=1;
path=push(path,x,y);
}
else if(WEST==0)
{
y-=1;
path=push(path,x,y);
}
else if(EAST==0)
{
y+=1;
path=push(path,x,y);
}
else if(chkExit(x,y,ExitX,ExitY)==1)
break;
else
{
MAZE[x][y]=2;
path=pop(path,&x,&y);
}
}
//不知道为啥,这部分没有输出。
cout<<"[老鼠走完的路路径(2的部分)]"<<endl;
for(i=0;i<10;i++)
{
for(j=0;j<12;j++)
cout<<MAZE[i][j]<<" ";
cout<<endl;
}
system("pause");
return 0;
}
link push(link stack,int x,int y)
{
link newnode;
newnode=new node;
if(!newnode)
{
cout<<"Error!"<<endl;
return NULL;
}
newnode->x=x;
newnode->y=y;
newnode->next=stack;
stack=newnode;
return stack;
}
link pop(link stack,int *x,int *y)
{
link top;
if(stack!=NULL)
{
top=stack;
stack=stack->next;
*x=top->x;
*y=top->y;
delete top;
return stack;
}
else
*x=-1;
return stack;
}
int chkExit(int x,int y,int ex,int ey)
{
if( x==ex && y==ey )
{
if(NORTH==1 || SOUTH==1 || WEST==1 || EAST==2)
return 1;
if(NORTH==1 || SOUTH==1 || WEST==2 || EAST==1)
return 1;
if(NORTH==1 || SOUTH==2 || WEST==1 || EAST==1)
return 1;
if(NORTH==2 || SOUTH==1 || WEST==1 || EAST==1)
return 1;
}
return 0;
}