Вообще "де-факто" алгоритмом для нахождения коротких путей является
A* (a star).
В вашем случае есть ещё задача о рюкзаке, в которой порядок слаживания предметов определён маршрутом. Если нет потребности куда-то дойти, то проще всего использовать алгоритм "
волны" проверяя при этом количество очков и "энергии".
В любом случае задача сводится к контролируемому
поиску в ширину.