Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで街区を訪問する総距離


街区を表す一意の文字列のマトリックスと、訪問するブロックを含む文字列の別のリストがあるとします。ブロック行列[0][0]にいる場合は、すべてのブロックを順番に訪問するために必要なマンハッタン距離の合計を見つけます。

したがって、入力が次のような場合

Q B C
D E Z
G G i

ブロック=[H、B、C]

次に、「h」は2ブロック下(南)、1ブロック右(東)、「b」は2ブロック上(北)、「c」は1ブロック右(東)であるため、出力は6になります。

これを解決するには、次の手順に従います-

  • coords:=キー「start」と値(0、0)のマップ
  • マットの各列について、
    • マットの各列について、
      • (row、col)をcoords [mat [row、col]]に挿入します
  • dist:=0
  • 先頭に「start」を追加してブロックを更新します
  • 範囲0からブロック-1のサイズのiの場合、実行
    • c1:=coords [blocks [i]]
    • c2:=coords [blocks [i + 1]]
    • d:=| c1 [0] -c2 [0] | + | c1 [1] -c2 [1] |
    • dist:=dist + d
  • return 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

  1. C++での総ハミング距離

    番号のリストがあるとします。与えられた数のすべてのペアのハミング距離を見つける必要があります。 2つの整数間のハミング距離は、対応するビットが異なる位置の数であることがわかっています。 したがって、入力が[4,14,17,2]の場合、出力は17になります。 これを解決するには、次の手順に従います- m:=1 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 return((a mod m)+(b mod m)) 関数mul()を定義します。これにはa、b、が必要です。 return((a mod m)*(b mod m)) 関

  2. Pythonで2つの長方形で覆われた総面積を見つけるプログラム

    2D平面内の2つの直線状の長方形でカバーされる総面積を求めたいとします。ここで、各長方形は、図に示すように、左下隅と右上隅によって定義されます。 これを解決するには、次の手順に従います- width_1:=| C-A |、height_1:=| D-B | width_2:=| G-E |、height_2:=| H-F | area:=width_1 * height_1 + width_2 * height_2 (G D)または(H