Начнем с итеративного углубления поиска в глубину.
Идея состоит в том, что поиск в глубину эффективен, но не обязательно найдет правильный ответ в ближайшее время. Итак, делайте DFS до глубины 1. Если вы не нашли ответ, делайте это до глубины 2. Повторяйте, пока не найдете ответ или не решите сдаться. Это автоматически дает вам кратчайший путь в дереве поиска, так как вы никогда не будете искать путь длиной N + 1, если есть путь длиной N.
Для реализации необходимо изменить поиск в глубину, чтобы он углублялся на N узлов (т. Е. Не генерировал новые узлы, если у вас N на глубину), и вызывал его с увеличением N. Вы не храните ничего, кроме значения N и того, что вы делаете для DFS.
Итерация идет с итеративным увеличением глубины поиска. Производительность может быть на удивление хорошей, учитывая коэффициент ветвления, превышающий два, так как в этом случае большая часть стоимости DFS с ограниченной глубиной достигается на самом низком уровне.
Сначала изучите итеративное углубление DFS, а затем примените это к IDA *. Я читал более раннюю статью Корфа об этих поисках более пятнадцати лет назад и не помню, как работает IDA *, но ваша главная проблема в том, что вы не понимаете итеративное углубление с самого начала.