Я решаю 8 головоломок с помощью звездного алгоритма. В этом решателе я реализую манхэттенские и неуместные эвристические функции. В некоторых случаях решатель работает нормально. Но в некоторых случаях на поиск решения уходит много времени. Я думаю, что одна из моих проблем заключается в функции, которая ищет узел с наименьшим значением в открытом списке (ожидает расширения).
a part of psedocode(from wiki)
while openset is not empty
x := the node in openset having the lowest f_score[] value
if x = goal
return reconstruct_path(came_from, came_from[goal])
................................
Итак, как лучше всего найти наименьшее значение f_score? Просто найдите минимальное значение, или мы должны изменить список, когда у нас есть состояние для добавления (отсортируйте список при добавлении состояния), чтобы минимальное значение было на первой позиции.