2011-03-19 86 views
2

我在使用我的迷宫求解算法时遇到了一些麻烦。我试图执行左手的规则。墙迷宫求解器

public Direction move(View v) { 
    if (!wallExistsToLeft(v)) { 
     turnLeft(); 
    } else if (v.mayMove(direction)) { 
     return direction; 
    } else if (!wallExistsToRight(v)){ 
     turnRight(); 
    } else { 
     turnAround(); 
    } 
    return direction; 
} 

方向始终设置为迷宫求解器所面对的当前方向。

turnX改变根据您当前面对

此举函数返回在迷宫求解器在该方向移动1个格方向的方向。

任何人都可以指向正确的方向吗?我确信有一些简单的递归方式可以实现,但我似乎无法解决这个问题。

目前我没有这两个测试:

enter image description here

任何帮助将不胜感激。

回答

2

从你的照片看来,你总是向右转。

其中,从您的代码中,将指示wallExistsToLeft(v)始终返回true,并且v.mayMove(direction)始终返回false。

0

只有在开始和目标位于墙的相同连接组件的墙段旁边时,左手定则才适用。如果在房间中间有一个支柱,并且你从旁边开始,那么你总是会走动它。第二个问题来自空地。如果没有墙附着,那么该算法将始终以圆圈形式呈现。通常一个人在提出这个算法的时候会认为是狭窄的走廊。 因此,无论您的实施是否正确,测试用例都无法通过简单的左手定则传递。