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 根据您当前面对的方向改变方向

move 函数返回迷宫求解器在该方向上移动 1 个空间的方向。

谁能指出我正确的方向?我确信有一些简单的递归方式可以实现,但我似乎无法解决。

目前我在这两个测试中失败了:

在此处输入图像描述

任何帮助将不胜感激。

4

2 回答 2

2

从你的照片看,你好像总是右转。

从您的代码中可以看出,wallExistsToLeft(v) 始终返回 true,而 v.mayMove(direction) 始终返回 false。

于 2011-03-19T01:34:19.270 回答
0

左手规则仅适用于开始和目标位于墙的相同连接组件的墙段旁边的情况。如果房间中间有一根柱子,你从它旁边开始,你会一直绕着它走。第二个问题来自开放空间。如果没有可依附的墙,那么算法将永远绕着圈子走。通常在建议这种算法时会考虑狭窄的走廊。因此,无论您的实现是否正确,测试用例都不能通过简单的左手规则传递。

于 2014-05-15T15:52:38.070 回答