我在接受一家大公司的采访时被问到这个问题:
假设我们有这个接口:
interface ILabyrinth
{
// create a labyrinth of size 100*100 max. Rabbit and carrot are positioned at random locations within the maze.
void Init();
// try to move the rabbit in one direction. return true if the move was successful, returns false otherwise (there was a wall)
bool tryMove(Direction d);
// return true if carrot and rabbit are at the same place.
bool isSuccess();
}
为了找到胡萝卜,你会如何移动兔子?一旦我们到达它,我们只需要停下来。
我的解决方案是应用经典的 DFS 搜索,但我们需要使用 tryMove() 函数回溯鼠标,因为我们自己无法做到这一点(因为数据仅由 ILabzrinth 接口包含和修改。
我通过在大小为 198*198 (= (100-1)*2) 的新地图中跟踪兔子的运动来做到这一点。在这张地图中,我保存了我们过去在那个位置的方向。所以我可以很容易地回溯。
你知道如何改进吗?