Астар в конкретном случае в C # - PullRequest
2 голосов
/ 01 марта 2010

Для стажировки я использовал алгоритм A * в следующем случае:

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

Вот две вещи, которые я уже сделал, но которые не удовлетворили моего босса:

1: Я создал следующие классы: - класс дверей, который содержит расположение 2-х разделенных квадратов и ориентацию двери (сверху, слева, снизу, справа), -Класс класса Map, который содержит список дверей, список прямоугольников, представляющих зоны, которые можно пройти и двумерный массив, представляющий квадраты земли (для дополнительной информации через перечисление) - классы для алгоритма A * (узел, AStar)

2: -Класс MapCase, который содержит информацию об эффекте кейса и дверях через перечисление (с включенным атрибутом [FLAGS], чтобы иметь возможность накапливать несколько данных по каждому кейсу) -a классы карты, которые содержат только двумерный массив классов MapCase - классы для алгоритма A * (все еще узел AStar).

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

Классы A * и узлов хороши и их легко поддерживать, поэтому я не думаю, что мне нужно сейчас их объяснять глубже.

Итак, вот мой вопрос: есть ли у кого-нибудь хорошая идея для реализации A * со спецификацией задачи (прямоугольник можно пройти, но с площадью квадратной единицы, проходя через двери)?

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

Хотелось бы, чтобы я разоблачил свою проблему ..

Спасибо

Kite

1 Ответ

1 голос
/ 01 марта 2010

Вместо многомерного массива вы можете использовать узлы с взвешенными ребрами.Это хорошо подходит для поиска A *, вам нужны расстояния и соединения.Если distancs все 1, тогда вы можете игнорировать взвешивания.

...