임의의 크기의 2D 이진 매트릭스가 있습니다. 이 행렬에서 최대 면적을 보여주는 일련의 직사각형을 찾고 싶습니다. 제약 조건은 다음과 같습니다.면적을 최대화하기 위해 사각형을 선택하십시오.
- 사각형은 행렬의 "0"- 필드 및 "1"- 필드 만 포함 할 수 있습니다.
- 각 직사각형은 다음 직사각형으로부터 주어진 거리를 가져야합니다.
그래서 날이이 행렬 조금 더 설명하자
1 0 0 1
0 0 0 0
0 0 1 0
0 0 0 0
0 1 0 0
개의 직사각형 사이의 최소 거리가, 최적의 솔루션은 모서리 사각형을 선택하면 될 것이다 따라서 1.하자 (1 , 0) - (3,1) 및 (1,3) - (4,3). 이 직사각형은 최소값입니다. 1 필드는 서로 떨어져 있고 "1"- 필드에 있지 않습니다. 또한이 솔루션은 최대 영역을 갖습니다 (6 + 4 = 10).
최소 거리가 2 인 경우, 영역 4 + 4 = 8 인 경우 최적 (1,0) - (4,0) 및 (1,3) - (4,3)이됩니다. 지금까지
list<rectangle> rectangles;
struct rectangle {
int i,j; // bottom left corner of rectangle
int width,length; // width=size in neg. i direction, length=size in pos. j direction
};
에 : 나는 목록에있는 모든 사각형을 저장 Find largest rectangle containing only zeros in an N×N binary matrix
:
는 지금까지,이 게시물에 유사한 사각형을 찾아 달성 , 나는 단지 무차별 체력 - 방법에 대해서만 생각했다. 그러나 물론, 나는 이것에 만족하지 않다.
list
에 해당하는 사각형을 찾는 방법에 대한 몇 가지 힌트와 팁을 줄 수 있으면 좋겠으며 내 문제가 해결되기를 바랍니다.
제한되어 있습니다 직사각형이 정사각형이 아니겠습니까? 면적 = 1 일 수 있습니까? – Rama
사각형 일 필요는 없지만 사각형의 길이와 너비와 관련하여 제한이 있습니다. 내 목적을 위해 행렬은 최소 50x50이고 사각형은 최소 크기가 3x3입니다. – Kapa11
정수 프로그래밍은 옵션입니까? –