Головоломка с алгоритмом сетки

У меня есть сетка некоторой ширины и высоты, где каждая ячейка может иметь три возможных значения (представленные как белый, зеленый и красный на этой иллюстрации):

illustration
(источник: corexii.com)

Вы можете выбрать любое количество зеленых ячеек (обозначенных синим цветом на следующей иллюстрации), которое покроет все красные ячейки (отмеченные желтым цветом) в предварительно определенномквадратном радиусе. (здесь 2) вокруг выбранных ячеек:

illustration
(источник: corexii.com)

Цель:

  • Покрыть как можно больше красных ячеек
  • Использовать как можно меньше синих ячеек
  • Делать это как можно быстрее

У кого-нибудь есть идеи для алгоритма?

Я просматриваю множество теорий, но больше всего меня интересует приближение, позволяющее сделать это быстро, а не точно. Быстрый разумный результат предпочтительнее вычисления оптимального в течение всего дня.

(На рисунках выше может быть представлено наиболее нормальное распределение этих ячеек, но не следует предполагать, что они похожи на все возможные распределения.)

8
задан Glorfindel 18 August 2019 в 11:17
поделиться