Алгоритм A * будет соответствовать вашим требованиям, вы просто должны подумать об этом немного по-другому.A * - это не просто алгоритм сетки, это алгоритм обхода графа .
Итак, чтобы сделать это, вы должны представить свою карту в виде серии взаимосвязанных точек.,Эти точки могут затем обернуться как большой тор.Каждая точка затем имеет связи с другими точками, и эти ребра имеют вес, так что обход разных ребер более «дорог» для вашего алгоритма.
Википедия содержит пример такого родаОбход графика вниз по странице со взвешенными краями.
Редактировать: Чтобы подробнее разобраться с проблемой обтекания.Скажем, у вас есть простая сетка точек, которые обернуты вокруг, как это
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+
Обычно края здесь будут
1-2, 2-3, 4-5, 5-6, 2-5, 3-6, 4-7, 5-8, 6-9, 7-8, 8-9
Чтобы сделать это обтекание, вы добавили бы края
1-7, 2-8, 3-9, 1-3, 4-6, 7-9
К списку ребер.Затем вы обычно применяете алгоритм A *, сохраняя каждую точку, которую вы посетили, и пересекая ребер , которые у вас есть с этой точки.Обратите внимание, что вы больше не можете просто обрабатывать рассматриваемые точки, но вы должны отслеживать ребра, которые имеет каждая точка.
Чтобы решить проблему некоторых деталей, вы сохраняете дополнительное значение на ребрахопределить сложность их прохождения.Скажем, что каждое ребро имеет значение 1, но ребро 4-5 труднее пройти.Затем вы должны присвоить этому краю значение 2 и использовать это значение при вычислении эвристического алгоритма для расстояния до точки цели.