Если у вас нет необходимости использовать жадный алгоритм, который здесь не верен.Для решения этой проблемы вы, естественно, используете технику, называемую «динамическое программирование».
Вы инициализируете все квадраты вашей пирамиды (вы делаете резервную копию) с бесконечностью - за исключением начальной точки, которая имеет собственное значение.
И вы обрабатываете пирамиду сверху вниз, строка за строкой.Вы пытаетесь перейти туда, где можете, из первого ряда (так что единственный - это верх), и вы обновляете узлы во втором ряду, присваивая им значение top + их значение.Затем вы переходите во второй ряд и обновляете узлы в следующем ряду.
Вполне возможно, что ранее вы нашли лучший маршрут к этому узлу (ведущий от узла, расположенного на одно место слева), поэтому вы будете обновлять только в том случае, если вновь созданный маршрут "быстрее".(Таким образом, вы произвели инициализацию бесконечности, что означает, что в начале вы не знаете, существует ли какой-либо маршрут на самом деле). После того, как вы закончите обработку уровня пирадов таким образом, вы узнаете, что у вас есть наилучшие возможные маршруты к узлам, которые размещены вуровень чуть ниже.
Даже если это звучит немного сложно, это довольно легко реализовать, я надеюсь, что это не создаст вам проблемы.