请大家帮忙看一下这个迷宫算法的问题在哪里。谢谢~~~
肉夹馍 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;
}