Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 매트릭스에 배치된 폭탄으로 모든 적이 죽었는지 확인

<시간/>

매트릭스 매트가 있다고 가정합니다. 다음과 같이 몇 가지 다른 값이 있습니다. 행렬의 셀에는 이 3개의 문자 중 하나가 포함될 수 있습니다.

  • 빈 영역은 0입니다.
  • 폭탄 1개.
  • 적을 위한 2개.

이제 폭탄은 한쪽 끝에서 다른 쪽 끝으로 수평 및 수직 방향으로만 폭발할 수 있습니다. 폭탄이 터지면 적들이 모두 죽는지 확인해야 합니다.

따라서 입력이 다음과 같으면

0 0 2 0
0 1 0 0
0 2 0 0
0 0 1 0

그러면 [1, 1] 위치의 폭탄이 [2, 1] 위치의 적을 채울 수 있고 [0, 2]의 적이 [3, 2]에 배치된 폭탄으로 죽기 때문에 출력은 True가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • r :=매트의 행 수
  • c :=매트의 열 수
  • i :=0, j :=0, x :=0, y :=0
  • 0 ~ r - 1 범위의 i에 대해
    • 0 ~ c - 1 범위의 j에 대해
      • mat[i,j]가 1이면
        • 0 ~ r - 1 범위의 x에 대해
          • mat[x, j]가 1이 아니면
            • 매트[x, j] :=0
        • 0 ~ c - 1 범위의 y에 대해
          • mat[i, y]가 1이 아니면
            • 매트[i, y] :=0
  • 0 ~ r - 1 범위의 i에 대해
    • 0 ~ c - 1 범위의 j에 대해
      • mat[i, j]가 2이면
        • 거짓을 반환
  • 참 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

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