Проверьте Рассел и Норвиг , главы 3 и 4, и поймите, что IDA * трудно программировать правильно. Возможно, вы захотите попробовать лучший рекурсивный первый поиск (RBFS), также описанный R & N, или просто старый A *. Последнее может быть реализовано с использованием std::priority_queue
.
IIRC, R & N описал IDA * в первом издании, а затем заменил его на RBFS во втором. Третье издание я еще не видел.
Что касается вашего второго редактирования, я не заглядывал в игру, но хорошей процедурой для получения эвристики является процедура расслабленных задач . Вы убираете правила игры до тех пор, пока не получите версию, для которой эвристика легко выражается и реализуется (и обходится дешево). Или, следуя восходящему подходу, вы проверяете основные правила, чтобы узнать, какое из них допускает легкую эвристику, затем пробуете это и добавляете другие правила по мере необходимости.