Для стажировки я использовал алгоритм A * в следующем случае:
- единица измерения представляет собой квадрат высоты и ширины 1,
- мы можем путешествовать из зоны, представленной прямоугольником, из другой, но мы не можем выходить за пределы этих предопределенных областей,
- мы можем перейти от прямоугольника к другому через дверь, представленную сегментом на соответствующем квадратном ребре.
Вот две вещи, которые я уже сделал, но которые не удовлетворили моего босса:
1:
Я создал следующие классы:
- класс дверей, который содержит расположение 2-х разделенных квадратов и ориентацию двери (сверху, слева, снизу, справа),
-Класс класса Map, который содержит список дверей, список прямоугольников, представляющих зоны, которые можно пройти
и двумерный массив, представляющий квадраты земли (для дополнительной информации через перечисление)
- классы для алгоритма A * (узел, AStar)
2:
-Класс MapCase, который содержит информацию об эффекте кейса и дверях через перечисление (с включенным атрибутом [FLAGS], чтобы иметь возможность накапливать несколько данных по каждому кейсу)
-a классы карты, которые содержат только двумерный массив классов MapCase
- классы для алгоритма A * (все еще узел AStar).
Поскольку версия 2 лучше первой (менее бесполезные вычисления, лучшая архитектура классов карт), мой босс все еще не удовлетворен архитектурой моих классов отображения.
Классы A * и узлов хороши и их легко поддерживать, поэтому я не думаю, что мне нужно сейчас их объяснять глубже.
Итак, вот мой вопрос: есть ли у кого-нибудь хорошая идея для реализации A * со спецификацией задачи (прямоугольник можно пройти, но с площадью квадратной единицы, проходя через двери)?
Он сказал, что сеточное видение проблемы (поэтому двумерный массив) не должно быть правильным способом решения проблемы.
Хотелось бы, чтобы я разоблачил свою проблему ..
Спасибо
Kite