У меня есть двумерная матрица произвольного размера. Я хочу найти набор прямоугольников в этой матрице, показывая максимальную площадь. Ограничения:Выберите прямоугольники для максимизации области
- Прямоугольники могут покрывать только поля «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, оптимальным будет (1,0) - (4,0) и (1,3) - (4,3) с площадью 4 + 4 = 8.
До сих пор я достиг, чтобы узнать, прямоугольники, аналогичные этому сообщению: Find largest rectangle containing only zeros in an N×N binary matrix
я сохранил все эти прямоугольники в списке:
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
};
До сих пор , Я только думал о методах грубой силы, но, конечно, я не доволен этим.
Надеюсь, вы можете дать мне несколько советов о том, как найти соответствующие прямоугольники в моем list
, и я надеюсь, что моя проблема будет понятна вам.
Это ограничение для прямоугольника не быть квадратом? и может ли она иметь площадь = 1? – Rama
Это не должно быть квадрат, но в моем коде я получил ограничения относительно длины и ширины прямоугольника. Для моих целей матрица имеет размер не менее 50x50, а прямоугольник имеет минимальный размер 3x3. – Kapa11
Является ли целочисленное программирование опцией? –