Другие языки программирования и технологии

Помогите решить задачку

Ребят помогите, код и желательно описание идеи алгоритма !

В двумерном целочисленном массиве размерностью n * m элементы приобретают только натуральных значений. Прямоугольником в массиве считать группу соседних элементов одного значения, которые вместе образуют прямоугольник размером k * l (k> 1, l> 1). прямоугольником нельзя считать группу элементов, принадлежию другому прямоугольнику. Вычислить количество прямоугольников в заданном массиве.
Интересная задача, но возможно где и решалась.
Думаю надо рекурсивный алгоритм здесь применять или подобие его.

Для массива n на m элементов предусмотреть, что элементы можно помечать int-м номером, типа номер прямоугольника будет. В начале все 0 - то бишь нет прямоугольника.

Начинаем условно с верхнего левого элемента и определяем прямоугольник.

Для начала определяем есть ли справа (если не превышена размерность) , снизу (если не превышена размерность) такое же натуральное значение, ну и вниз вправо еще одну ячейку.

Это будет минимальный допустимый прямоугольник. Дальше уже надо двигаться вправо и вниз по крайним и вычислять стороны этого прямоугольника, если сторона меньше ранее найденной на прошлом шаге, то стоп (а то это уже и не прямоугольник будет) . По точка которые нашли: начальная, крайняя правая и крайняя нижняя можно пометить все внутри как принадлежащие прямоугольнику 1 и увел. счетчик прямоугольников.

Далее ищем по порядку следующую точку у которой пометка 0 - и проверяем все как выше написано.

Если жестко задано k на l и только один одного такого типа, то все бы упростилось.
Айбат Саркытов
Айбат Саркытов
62 004
Лучший ответ
Описание примерно такое.
Договоримся, что будем помечать отрицательными числами уже найденные прямоугольники.

Тогда нам нужен двойной цикл, который будет выбирать первый элемент прямоугольника. При этом если элемент отрицательный, то идем на следующую итерацию.

А внутри цикла мы будем проверять, есть прямоугольник или нет. Минимальный у нас 2х2 ну и далее до конца массива. Если прямоугольник обнаружен, увеличиваем счетчик и меняем все найденные элементы на отрицательные. Тут есть только один хитрый момент: прямоугольники надо искать в последовательности 2х2, 2х3, 3х2, 3х3, 2х4, 4х2, 3х4, 4х3... -а простой двойной цикл даст нам 2х2, 3х2, 4х2, 5х2...,что в корне неверно. Поэтому тут надо действовать нескольно умнее - подумай. Удачи.
Hamdulla Israfil
Hamdulla Israfil
83 322
на каком языке нужен код?