У меня есть 50 x 50 2D сетка. Сетки сетки могут иметь одно из трех состояний:
1: "inside"
2: "empty"
3: "wall"
Моя первоначальная конфигурация - это сетка с некоторыми ячейками (возможно, 10% из них, в основном смежные), помеченные как "внутри". Случайно есть некоторые "стенные" ячейки. Другие ячейки "пусты".
Я пытаюсь найти самый короткий забор, который я могу построить вокруг "внутренних" ячеек, чтобы все "внутренние" ячейки были огорожены (ограждения построены путем смены "пустых" ячеек на "стены" ). Если мы оцениваем решения, , лучшее решение минимизирует количество "пустых" ячеек, которые необходимо изменить на "стенные" ячейки.
Более строго, в окончательной конфигурации есть ограничение, которое для каждой "внутренней" ячейки не имеет пути к краю сетки, которая не проходит через "стенную" ячейку. В моем случае допускается диагональное движение.
Я предполагаю, что я могу сделать что-то умное, используя дистанционное преобразование, или вычислить топологический скелет сетки, но это не сразу очевидно для меня. Если это классическая проблема оптимизации, я не знаю, какие условия для Google.
Существует ли алгоритм O (n ^ 2) для нахождения кратчайшего забора?
EDIT: Это не так просто, как просто найти выпуклую оболочку "внутренних" ячеек, поскольку уже существующие "стенные" ячейки свободны. Представьте себе "C" -образный кусок ранее существовавшей стены, со всеми "внутренними" ячейками внутри C. Большую часть времени завершение C "стеновыми" ячейками будет дешевле, чем рисование выпуклого корпуса вокруг всех "внутри" ячеек. Это затрудняет эту проблему.