使用 Python 檢查矩陣中放置的炸彈是否炸死了所有敵人


假設我們有一個矩陣 mat。它包含以下幾種不同的值:矩陣單元格可以包含以下 3 種字元中的任何一種。

  • 0 代表空區域。
  • 1 代表炸彈。
  • 2 代表敵人。

炸彈只能在水平和垂直方向上爆炸,從一端到另一端。我們必須檢查當炸彈爆炸時是否所有敵人都會被炸死。

因此,如果輸入如下所示:

0020
0100
0200
0010

則輸出將為 True,因為位於 [1, 1] 位置的炸彈可以炸死位於 [2, 1] 位置的敵人,而位於 [0, 2] 位置的敵人將被位於 [3, 2] 位置的炸彈炸死。

為了解決這個問題,我們將遵循以下步驟:

  • r := mat 的行數
  • c := mat 的列數
  • i := 0, j := 0, x := 0, y := 0
  • 對於 i 從 0 到 r - 1:
    • 對於 j 從 0 到 c - 1:
      • 如果 mat[i, j] 為 1,則:
        • 對於 x 從 0 到 r - 1:
          • 如果 mat[x, j] 不為 1,則:
            • mat[x, j] := 0
        • 對於 y 從 0 到 c - 1:
          • 如果 mat[i, y] 不為 1,則:
            • mat[i, y] := 0
  • 對於 i 從 0 到 r - 1:
    • 對於 j 從 0 到 c - 1:
      • 如果 mat[i, j] 為 2,則:
        • 返回 False
  • 返回 True

讓我們看看下面的實現來更好地理解:

示例

 線上演示

def solve(mat):
   r = len(mat)
   c = len(mat[0])
   i, j, x, y = 0, 0, 0, 0
   for i in range(r):
      for j in range(c):
         if mat[i][j] == 1:
            for x in range(r):
               if mat[x][j] != 1:
                  mat[x][j] = 0
            for y in range(c):
               if mat[i][y] != 1:
                  mat[i][y] = 0
   for i in range(r):
      for j in range(c):
         if mat[i][j] == 2:
            return False
   return True
matrix = [ [0,0,2,0], [0,1,0,0], [0,2,0,0], [0,0,1,0] ]
print(solve(matrix))

輸入

[
[0,0,2,0],
[0,1,0,0],
[0,2,0,0],
[0,0,1,0]
]

輸出

True

更新於:2020-12-29

瀏覽量:128

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.