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

Python에서 0으로 채워진 모든 사각형 찾기

<시간/>

이진 2D 행렬이 있다고 가정하면 이제 0으로 채워진 모든 직사각형의 시작점과 끝점을 찾아야 합니다. 직사각형은 분리되어 있고 서로 닿지는 않지만 배열 경계에 닿을 수 있다는 점을 명심해야 합니다. 요소가 하나만 있는 직사각형도 가능합니다.

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

1 0 1 1 1 0 1
1 1 0 1 1 1 1
1 0 1 1 0 0 1
1 0 1 1 0 0 1
1 0 1 1 0 1 1
1 0 1 0 0 0 0
1 1 1 0 0 0 1
1 0 1 1 1 0 1

출력은 [[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1 , 5, 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]

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

  • find_rect() 함수를 정의합니다. 이것은 i,j,a,output,index
  • 를 취합니다.
  • x :=행 수
  • y :=열 수
  • flag_col :=0
  • flag_row :=0
  • i ~ x 범위의 m에 대해
    • a[m, j]가 1과 같으면
      • flag_row :=1
      • 중단
    • a[m, j]가 5와 같으면
      • 아무것도 하지 않음
    • j ~ y 범위의 n에 대해
      • a[m, n]이 1과 같으면
        • flag_col :=1
        • 중단
      • a[m, n] :=5
    • flag_row가 1과 같으면
      • 출력[색인] 끝에 m-1 삽입
    • 그렇지 않으면
      • 출력[색인] 끝에 m 삽입
    • flag_col이 1과 같으면
      • 출력[색인] 끝에 n-1 삽입
    • 그렇지 않으면
      • 출력[색인] 끝에 n 삽입
  • 메인 방법에서 다음을 수행하십시오. -
  • n :=크기
  • op :=새 목록
  • idx :=-1
  • 0에서 n 사이의 i에 대해
    • 범위 0에서 a[0]의 크기에 있는 j에 대해
      • a[i, j]가 0과 같으면
        • [i,j]를 op에 삽입
        • idx :=idx + 1
        • find_rect(i, j, a, op, idx)
  • 디스플레이 작업

예제 코드

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

def find_rect(i,j,a,output,index):x =len(a) y =len(a[0]) flag_col =0 flag_row =0 for m in range(i,x):if a [m][j] ==1:flag_row =1 break if a[m][j] ==5:범위(j, y)에서 n에 대해 전달:a[m][n] ==1:flag_col =1 break a[m][n] =5 if flag_row ==1:output[index].append( m-1) else:output[index].append(m) if flag_col ==1:output[index] .append(n-1) else:output[index].append(n)def get_coord(a):n =len(a) op =[] idx =-1 for i in range(0,n):for j 범위 내(0, len(a[0])):a[i][j] ==0인 경우:op.append([i, j]) idx =idx + 1 find_rect(i, j, a, op , idx) 인쇄 (op) 테스트 =[[1, 0, 1, 1, 1, 0, 1], [1, 1, 0, 1, 1, 1, 1], [1, 1, 1, 0 , 0, 1, 1], [1, 0, 1, 1, 0, 0, 1], [1, 0, 1, 1, 0, 1, 1], [1, 0, 1, 0, 0 , 0, 0], [1, 1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 1, 0, 1]]get_coord(테스트) 

입력

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

출력

[[0, 1, 0, 1], [0, 5, 0, 5], [1, 2, 1, 2], [2, 3, 2, 4], [3, 1, 5 , 1], [3, 4, 6, 5], [5, 3, 6, 5], [7, 1, 7, 1], [7, 5, 7, 5]]