> The heuristic function is problem-specific. If the heuristic function is admissible, meaning that it never overestimates the actual cost to get to the goal, A* is guaranteed to return a least-cost path from start to goal.
In this case the euclidean does not overestimate so I would guess there is a bug in the implementation.
[1] https://en.wikipedia.org/wiki/A*_search_algorithm
Edit:
Having taken a look at the source code I believe the problems mostly stem from the `addNeighboursToOpen` function [2]. It sets the distance and parent of unvisited neighbors of the current node. However this may happen multiple times for a node before it is actually visited. Meaning that the distance and parent is updated multiple times and the value at the end is not the optimal one. A simple fix would be to do a if check to see if the node already has a distance assigned.
[2] https://github.com/Walker-TW/Algorithm-Visualizer/blob/maste...
Also - is the behavior shown in the screenshot working as intended, as the shown path includes a detour?