用Python访问街区的总距离

假设我们有一个代表城市街区的唯一字符串矩阵,另一个包含要访问的街区的字符串列表。如果我们位于块矩阵[0] [0],则找到按顺序访问每个块所需的曼哈顿总距离。

所以,如果输入像

C
dËž
GG一世

块= [H,B,C]

然后输出将是6,因为“ h”是底部2个块(向南)和1块右侧(东),“ b”是2个块向上(北),“ c”是1块右侧(东)。

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

  • 坐标:=具有键“开始”和值(0,0)的映射

  • 对于垫子中的每一行,

    • 将(row,col)插入到坐标中[mat [row,col]]

    • 对于垫子中的每个col

    • dist:= 0

    • 通过在开头添加“开始”来更新块

    • 对于0到块-1大小的i,执行

      • c1:=坐标[blocks [i]]

      • c2:=坐标[blocks [i + 1]]

      • d:= | c1 [0] -c2 [0] | + | c1 [1] -c2 [1] |

      • dist:= dist + d

    • 返回dist

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

    示例

    class Solution:
       def solve(self, mat, blocks):
          coords = {'start': (0,0)}
          for row in range(len(mat)):
             for col in range(len(mat[row])):
                coords[mat[row][col]] = (row,col)
          dist = 0
          blocks = ['start']+blocks
          for i in range(len(blocks)-1):
             c1 = coords[blocks[i]]
             c2 = coords[blocks[i+1]]
             d = abs(c1[0]-c2[0]) + abs(c1[1]-c2[1])
             dist += d
          return dist
    ob = Solution()inp = [["q", "b", "c"],
    ["d", "e", "z"],
    ["g", "h", "i"]]
    blk = ["h", "b", "c"]
    print(ob.solve(inp, blk))

    输入项

    [["q", "b", "c"],["d", "e", "z"],["g", "h", "i"]]

    输出结果

    6