我的迷宫解决算法遇到了一些问题。我正在尝试实施左手规则。
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个空格的方向。
有人能指出我正确的方向吗?我确信有一些简单的递归方式可以实现,但我似乎无法解决它。
目前我在这两项测试中失败了:
非常感谢任何帮助。
答案 0 :(得分:2)
从你的照片看,你总是向右转。
根据您的代码,表示wallExistsToLeft(v)始终返回true,而v.mayMove(direction)始终返回false。
答案 1 :(得分:0)
左手规则仅适用于起始和目标位于相同连接墙组件的墙段旁边的情况。如果房间中间有一根柱子而你从它旁边开始,你就会一直走动它。 第二个问题来自开放空间。如果没有墙可以坚持,那么算法将始终以圆圈行走。通常人们会在建议这种算法时考虑是否有狭窄的走廊。 因此,无论您的实现是否正确,都不能通过简单的左手规则传递测试用例。