标题:有关迷宫问题的错误
只看楼主
zorrozzz
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-10-22
 问题点数:0 回复次数:1 
有关迷宫问题的错误

我照着严蔚敏书上作的迷宫问题的程序,我在自己的机子上运行出了正确结果后就发生逻辑错误了,可更郁闷的是带到学校机房去用时,连结果都没有就进入逻辑错误了,我调试了一下,结果都进栈了,就是输出结果那出了问题,是我的栈出了问题吗?我写的栈虽然不健壮,但应该也没大错误吧,还有我是用不伦不类的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;
}

搜索更多相关主题的帖子: 迷宫问题 int 严蔚敏 学校 结果 
2007-05-08 00:11
zorrozzz
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2006-10-22
得分:0 
回复:(zorrozzz)有关迷宫问题的错误

哎!!是我自己犯了低级错误,在base=top=new snode[100]就行了

2007-05-08 21:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-137541-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.299160 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved