我照着严蔚敏书上作的迷宫问题的程序,我在自己的机子上运行出了正确结果后就发生逻辑错误了,可更郁闷的是带到学校机房去用时,连结果都没有就进入逻辑错误了,我调试了一下,结果都进栈了,就是输出结果那出了问题,是我的栈出了问题吗?我写的栈虽然不健壮,但应该也没大错误吧,还有我是用不伦不类的c++写的,应该也不是错误的原因吧?希望大家测试一下,能告诉我错在哪里?
#include <iostream>
using namespace std;
//栈的元素类型
typedef struct
{
int x;
int y;
int di;
}snode;
//栈的类
class stack
{
snode *base;
snode *top;
public:
stack()
{
base=top=new snode;
}
void push(snode e)
{
*top++=e;
}
snode pop(snode &e)
{
return e=*--top;
}
int isEmpty()
{
if(base==top)
return 1;
else return 0;
}
snode gettop()
{
return *(top-1);
}
};
//建迷宫
int map[5][5]={
{1,1,1,1,1},
{1,0,1,1,1},
{1,0,0,0,1},
{1,1,1,0,1},
{1,1,1,1,1}
};
//探索下一步的函数
void nextPos(int &x,int &y,int di)
{
switch(di){
case 1:x--;break;
case 2:y++;break;
case 3:x++;break;
case 4:y--;break;
}
}
//maze主函数
void maze()
{
stack s;
int x,y,di;
snode e;
x=1;
y=1;
do
{
if(map[x][y]==0)
{
map[x][y]=3; //标记走过的路为3
e.x=x;
e.y=y;
e.di=1;
s.push(e);
if(e.x==3&&e.y==3)
{
cout<<"找到了,嘿嘿!!"<<endl;
while(!s.isEmpty()) //调试到这还是对的,就是下面出错了
{
s.pop(e);
cout<<"("<<e.x<<","<<e.y<<")"<<endl;
}
break;
}
nextPos(x,y,1);
}
else
{
if(!s.isEmpty())
{
s.pop(e);
while(e.di==4&&!s.isEmpty())
{
map[e.x][e.y]=-1;//标记为不能通过
s.pop(e);
}
if(e.di<4)
{
e.di++;
s.push(e);
x=e.x;
y=e.y;
nextPos(x,y,e.di);
}
}
}
}while(!s.isEmpty());
}
int main()
{
maze();
return 0;
}