Я изо всех сил пытаюсь найти точный ответ на мою проблему. У меня есть сетка 20 на 20. Я ищу пример кода PHP, формулу или правильное имя алгоритма, необходимого для выяснения следующего:
Скажем, моя сетка проходит от А до Т по горизонтали и от 1 до 20 по вертикали. Я рассчитываю рассчитать кратчайший маршрут от моего источника A5 до пункта назначения G12, в то же время проходя через C7, D9, E5 или J8, основываясь на кратчайшем общем маршруте.
Кроме того, было бы полезно узнать, как расширить это, чтобы оно не только проходило через одну точку, но, возможно, 2, на пути к месту назначения (G12).
Я искал 2 дня, и мой разум теперь кружится с Dijkstra, TSP, BFS и остальными!
Спасибо!
Если вы можете перейти прямо к средним точкам, игнорируя всю сетку, то базовая геометрия предполагает, что кратчайший путь от точки S
(терпкий), чтобы указать E
(nd) через необходимую точку A
это просто два отрезка SA + AE
и вычисление его общего расстояния на самом деле довольно быстро (это просто стандартное евклидово расстояние). Так что, если у вас нет тысячи возможных средних точек, просто проверяющих все пути SA+AE
, SB+BE
… и сравнение расстояний будет довольно быстрым. Даже если есть две средние точки и размер пула составляет десяток, комбинаций будет всего несколько сотен, поэтому грубая сила все равно будет работать довольно быстро.
Других решений пока нет …