이진 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
- a[m, n]이 1과 같으면
- flag_row가 1과 같으면
- 출력[색인] 끝에 m-1 삽입
- 그렇지 않으면
- 출력[색인] 끝에 m 삽입
- flag_col이 1과 같으면
- 출력[색인] 끝에 n-1 삽입
- 그렇지 않으면
- 출력[색인] 끝에 n 삽입
- a[m, j]가 1과 같으면
- 메인 방법에서 다음을 수행하십시오. -
- 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)
- a[i, j]가 0과 같으면
- 범위 0에서 a[0]의 크기에 있는 j에 대해
- 디스플레이 작업
예제 코드
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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]]