使用 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

开启您的职业生涯

完成课程获得认证

开始学习
广告