Хороший вопрос. Я согласен, что статья была запутанной. Я обновил его, чтобы ответить на ваш вопрос.
Во-первых, чтобы ответить на вопрос, который вы задали: следует ли изменить данный код, чтобы он выполнял другую функцию? Если вы хотите, конечно, но вы, конечно, не должны. Мой совет - передать функцию, которую хочет алгоритм, потому что это функция, которая ему нужна. Зачем передавать информацию, которая не нужна алгоритму?
Как это сделать?
Алгоритм A *, который я даю, принимает две функции.
Первая функция дает точное расстояние между двумя заданными соседними узлами .
Вторая функция дает расчетное расстояние между данным узлом и целевым узлом .
Это вторая функция, которой у вас нет.
Если у вас есть функция, которая дает расчетное расстояние между двумя указанными узлами и вам нужна функция, которая дает приблизительное расстояние между данным узлом и узел назначения , затем просто создайте эту функцию:
Func<Node, Node, double> estimatedDistanceBetweenTwoNodes = whatever;
Func<Node, double> estimatedDistanceToDestination = n=>estimatedDistanceBetweenTwoNodes(n, destination);
И все готово. Теперь у вас есть нужная вам функция.
Этот метод преобразования двухпараметрической функции в однопараметрическую функцию путем фиксации одного из параметров к определенному значению называется «частичным применением функции», и он чрезвычайно распространен в функциональном программировании.
Это все ясно?
Теперь перейдем ко второй и гораздо более серьезной проблеме. Как я описывал в своих статьях, правильная работа алгоритма основывается на консервативной функции оценки . Можете ли вы гарантировать , что расстояние до Манхэттена никогда не переоценивает ? Это кажется маловероятным. Если где-нибудь в сетке есть «диагональная» улица, то манхэттенское расстояние переоценивает оптимальное расстояние между двумя точками, и алгоритм A * не найдет его. Большинство людей используют евклидово расстояние (также известное как норма L2) для алгоритма A *, поскольку кратчайшее расстояние между двумя точками по определению не является завышенной. Почему вы используете расстояние Манхэттен? Я очень смущен, почему вы думаете, что это хорошая идея.