用 Python 编写程序,检查机器人是否能通过在已访问的地点继续移动来到达目标

pythonserver side programmingprogramming更新于 2026/2/3 19:56:17

假设我们有一个机器人,它目前位于位置 (0, 0)(笛卡尔平面)。如果我们有一个它可以进行的移动列表,其中包含 N(北)、S(南)、W(西)和 E(东)。但是,如果机器人到达了它之前去过的地点,它将继续沿同一方向移动,直到到达新的未访问地点。我们必须检查它移动后是否会在 (x, y) 坐标处结束。

因此,如果输入如下

moves = ['N','N','E','N','W','S'], coord = [0, -1], 那么输出将为 True,因为机器人将向上移动两次,向右移动一次,再次向上移动一次,向左移动一次,向下移动一次,当访问当前位置时,它将向下移动,然后也访问该位置,再次向下,因此停在位置 (0, −1)

为了解决这个问题,我们将遵循以下步骤 −

  • ny := 0, nx := 0

  • l := 一个新的集合,最初插入坐标 (0, 0)

  • 对于 moves 中的每个 k,执行

    • 如果 k 与 "N" 相同,则

      • 当 l 中的 (nx, ny) 时,执行

        • ny := ny + 1

    • 否则,当 k 与 "S" 相同时,则

      • 当(nx, ny) 在 l 中,执行

        • ny := ny − 1

    • 否则,当 k 与 "E" 相同时,则

      • 当 (nx, ny) 在 l 中,执行

        • nx := nx + 1

    • 否则,

      • 当 (nx, ny) 在 l 中,执行

        • nx := nx − 1

    • 将(nx, ny) 添加到 l 中

  • 当 coord 与 (nx, ny) 相同时返回 true,否则返回 false

让我们看看下面的实现以便更好地理解 −

示例

class Solution:
   def solve(self, moves, coord):
      ny = nx = 0
      l = {(0, 0)}
      for k in moves:
         if k == "N":
            while (nx, ny) in l:
               ny += 1
         elif k == "S":
            while (nx, ny) in l:
               ny -= 1
         elif k == "E":
            while (nx, ny) in l:
               nx += 1
         else:
            while (nx, ny) in l:
               nx -= 1
         l.add((nx, ny))
      return coord[0] == nx and coord[1] == ny

ob = Solution()
moves = ['N','N','E','N','W','S']
coord = [0,-1]
print(ob.solve(moves, coord))

输入

['N','N','E','N','W','S'], [0,-1]

输出

True

相关文章


有用资源