一尘不染

检查是否存在圆

algorithm

在Google采访中有人问我这个问题。我们给了一个由字母F,L,R组成的字符串。-这是机器人遵循的指令

F-向前走一步。

向左转。

R-向右转。

字符串长度最大为2500个字符。

字符串可以无限次运行。我们需要判断是否存在一个半径为r的圆(r可以是任何实数),以使机器人永远不会离开圆。我被困在这一点上。我想到了使用凸包,但是如何无限期地对其进行检查。请帮忙。提前致谢


阅读 285

收藏
2020-07-28

共1个答案

一尘不染

  1. 每次运行(一次运行将执行给定字符串的所有命令一次)会更改两件事:机器人寻找的方向及其位置(即,每次运行会将其移动某个矢量(此矢量的方向取决于其方向)运行前的初始方向)并将其旋转)。
  2. 可能的方向数为4。因此,在运行了4次仿真后,它的方向与最初的方向相同(每次摩擦都将其旋转相同的角度)。

  3. 这就是为什么连续运行4次只是将其平移了某个向量而没有任何旋转的原因。

  4. 因此,我们可以连续运行4次仿真,看看它是否在原始点停止。如果是这样,我们可以找到包含其路径的最小圆。否则,不存在这样的圈子。

2020-07-28