Это зависит от стоимости диагональных ходов.
Рассмотрим ситуацию равномерной стоимости : стоимость диагонального перемещения такая же, как и стоимость не диагональной ( Чебышеврасстояние ).
![A* - Diagonal distance - uniform cost](https://i.stack.imgur.com/dMwqe.png)
В этом случае расстояние между зеленой и красной точкой составляет 6
.В общем:
def chebyshev_distance(node):
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return max(dx, dy)
, в то время как эвристическое евклидово расстояние:
def heuristic(node):
dx = abs(node.x - goal.x)
dy = abs(node.y - goal.y)
return sqrt(dx * dx + dy * dy)
дает heuristic ≅ 6.71
и переоценивает стоимость пути, что приводит к недопустимой эвристике ( может ненайти оптимальный путь ).
В общем:
max (| d x |, | d y |) = | Макс |= sqrt (Макс 2 ) ≤ sqrt (Макс 2 + min 2 ) = sqrt (d x 2 + d y 2 )