Найти строго монотонный c кратчайший путь можно путем ослабления ребер в порядке их веса.
Допустим, мы хотим найти кратчайший восходящий путь. Мы бы расположили края в порядке возрастания, а затем расслабили бы их в этом порядке. «Расслабление» просто означает обновление веса узла в конечной точке ребра, чтобы он был равен весу ребра плюс вес его узла начальной точки, если эта сумма меньше текущего значения. Это то же самое, что расслабление остроты у Дейкстры. Это всегда будет давать кратчайший путь по возрастанию (и его можно сделать строго по возрастанию, если мы одновременно обновим веса узлов для всех одинаково оцененных ребер).
Мы также можем найти кратчайший путь по убыванию путем упорядочивания ребер в порядке убывания. Один из этих двух путей будет кратчайшим monotoni c путем.
Я думаю, вам повезет больше, если вы будете использовать этот подход с перебором отсортированных краев (за время n logn), чем пытаться l oop по узлам, как в вышеупомянутом методе - если вам нужно решить проблему, обновив только метод, который вы нам показали, это становится гораздо более сложной проблемой.