Я работаю в сетке-вселенной - объекты существуют только в целочисленных местоположениях в двумерной матрице.
Некоторые термины:
Квадрат - дискретное местоположение,Каждый квадрат имеет координаты int x и int y, и никакие два квадрата не имеют одинаковую пару x и y.
Смежный: квадрат X смежен с другим квадратом Y, если величина разности либо их xили координата y не больше 1. Проще говоря, все квадраты сразу в направлениях N, NE, E, SE, S, SW, W и NW смежны.
Legend:
'?' - Unknown Traversibility
'X' - Non Traversable Square
'O' - Building (Non Traversable)
' ' - Traversable Square
Проблема:
Учитывая следующую общую ситуацию:
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? O O ? ? ?
? ? ? O O ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ?
, где застройщик примыкает к одному из четырех зданий, я хочу построить два здания таким образом, чтобы они оба разделялиобщий смежный квадрат, который также смежен по крайней мере с одним из четырех существующих зданий, и этот общий смежный квадрат не заблокирован.
Основные действительные решения:
X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X
X X X O O X X X X X X O O X X X X X X O O X X X
X X X O O X X X X X X O O X X X X X O O O X X X
X X X O X X X O X X X X
O O X X X O X X X X X X X X
X X X X X X X X X X X
В настоящее время яВыполните итерацию по всему пройденному квадрату, примыкающему к четырем зданиям, и ищите квадраты, которые имеют 3 смежных проходных квадрата, но иногда это приводит к ситуациям, таким как:
X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X O X X X X X O X
X X X O O X X X X X O O O X X X O O O X X
X X X O O X X X X X O O X X X X O O X X
X X X X X X X X X X X X X X
X X X O O X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X
Anу вас мысли о том, как я могу улучшить свой алгоритм?
РЕДАКТИРОВАТЬ: Добавлен еще один сбойный случай.
РЕДАКТИРОВАТЬ: Я бы тоже хотел бытьвозможность узнать, не существует ли возможной конфигурации, в которой эти условия могут быть выполнены.Мне не гарантировано жизнеспособное решение, и я не хотел бы попробовать, если нет способа сделать это успешно.