Ну, одна серьезная проблема с вашим псевдокодом и одна незначительная проблема.
Основная проблема:
Когда вы найдете nTile
, это может быть уже closed
или open
,и в вашей реализации - вы игнорируете это и пропускаете это.Однако, если он закрыт или открыт, вам следует проверить, может быть, стоимость пути, которую вы только что нашли, лучше , чем стоимость пути в closed
или open
, и, если она есть, удалите ее.из closed
/ open
и заново вставьте его в open
с новой стоимостью пути.
Незначительная проблема:
Иногда существует более одного целевого узла [существует набор изцелевые узлы, вы ищете путь к одному из них].Таким образом, вместо if targetTile.equals(activeTile)
вы можете проверить if heuristicValue(activeTile) == 0
[при условии, что эвристическая функция допустима] или проверить if activeTile is in targetStates
.