请大家帮忙看一下这个迷宫算法的问题在哪里。谢谢~~~

肉夹馍 2009-04-27 11:22:36
迷宫是给定的,用这个算法走的话,比如开始一直向上走,碰墙,左转,走.....碰墙,向下转,下边还能走,但向下走一步后,就回退两步,在往前走两步......一直这样,卡死在这里。

简单说明一下:pIMaze->GetPositionInfo(Right)返回值是当前位置右边一个位置的状态。

我的想法是,每到一个路径,将该点对应的visited[x][y]的值置1,然后分别判断,Right,Up,Left,Down四个方向是否能走 (GetPositionInfo返回值为wall或者路径已走过及不能走),能走的话,就质d为相应值(d为要走的方向),将相反方向入栈(用以碰到死胡同时退后)。


Direction GetNextDirection()
{

Direction d ;
Position ps; //用于存放当前坐标
ps=pIMaze->GetCurrentPosition();
visited[ps.X][ps.Y]=1; //对已走过的路径坐标是。


if(pIMaze->GetPositionInfo(Right) != Wall && visited[(ps.X)+1][ps.Y] ==0)
{
d=Right;
Push(stack,Left);
}


else if(pIMaze->GetPositionInfo(Up) != Wall && visited[ps.X][(ps.Y)-1] ==0)
{
d=Up;
Push(stack,Down);
}

else if(pIMaze->GetPositionInfo(Left) != Wall && visited[(ps.X)-1][ps.Y] ==0)
{
d=Left;
Push(stack,Right);
}

else if(pIMaze->GetPositionInfo(Down) != Wall && visited[ps.X][(ps.Y)+1] ==0)
{
d=Down;
Push(stack,Up);
}
else
Pop(stack,d);



return d;
}
...全文
133 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
肉夹馍 2009-05-20
  • 打赏
  • 举报
回复
是啊.....................
coverallwangp 2009-05-13
  • 打赏
  • 举报
回复
我觉得你这样有个问题
假设如果你从a位置向右(b位置)能走通,则a位置被压栈,当前位置就是b了,则b的四个方向中的左方向是a,也就是说b在取左方向的时候肯定能走通,所以又会把a压栈。

迷宫问题在数据结构课程中有讲,当时使用递归做的。你可以参考一下
yeerxiang 2009-05-13
  • 打赏
  • 举报
回复

lanyineva 2009-05-13
  • 打赏
  • 举报
回复
不错的想法,你是李龙海老师的学生吧!
肉夹馍 2009-05-03
  • 打赏
  • 举报
回复
谢谢了,不过我的思想是用栈实现回退,即当四个方向都不能走时,弹栈,回退到上一步。及 如果这次判断是像Right走了,那么就将Left压栈,当像Right走一步时,如果遇到死胡同,那么弹栈,像Left走一步,就可以回到上一步了么
liao05050075 2009-04-30
  • 打赏
  • 举报
回复
你可以使用IDE的debug功能,一步一步调试,应该很快能找出错误
sun451989 2009-04-30
  • 打赏
  • 举报
回复
1.visited[(ps.X)+1][ps.Y] ==0//要判断下是否越界,但不是错误产生的原因,
2.Push(stack,Left); //压栈要是当前位置的,问题出在这里
liliangbao 2009-04-27
  • 打赏
  • 举报
回复
帮顶~

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧