В продолжение ответа Byte56 я хотел бы указать, что в вашем конкретном наборе данных использование Манхэттенского расстояния в качестве эвристической функции фактически всегда будет идеальной эвристикой в том смысле, что она всегда будет возвращать фактическую стоимость пути (при условии, что есть ничто не "блокирует" пути).
Следует также отметить, что все узлы в правильном направлении (по горизонтали или по вертикали) будут давать одинаковое ожидаемое расстояние (поскольку существует множество одинаково коротких путей к цели). Вы должны знать, что ваша очередь приоритетов (открытый набор) должна, в случае связанных приоритетов, сначала удалить из очереди последний добавленный узел (LIFO - Last In First Out). При этом вы будете проверять только те узлы, которые окажутся на оптимальном пути . Если вы исследуете одинаково подходящие узлы в порядке FIFO («первым пришел - первым обслужен»), вы будете эффективно проверять все узлы, являющиеся частью лучшего пути. Эта проблема возникает из-за того, что есть несколько одинаково хороших путей к целевому узлу.