Вы можете работать в обратном направлении с конца и применять алгоритм динамического программирования:
Начните с последней записи в пути:
- Если это синий:
- Если после этого места осталось менее 5: свяжите зеленый ход (5 шагов) с этой записью
- В противном случае проверьте каждую из точек, которые находятся на 2, 3 и 5 впереди на пути (которые уже были обработаны): выберите ту, которая имеет наилучшее решение (наименьшее количество ходов), связанную с ней. Расширьте (добавьте) это решение соответствующим ходом (2 = белый, 3 = ... и т. Д.) И сохраните эту информацию в текущей записи.
Повторите это для каждой предыдущей записи в пути, каждый раз сохраняя информацию о кратчайшем пути оттуда до выигрыша (если он синий)
Решение - это то, что было сохранено в первой записи пути. Конечно, бывают ситуации, когда победа невозможна.