Есть ли лучший способ, чем алгоритм Дейкстры, найти быстрый путь, который не превышает указанную стоимость

У меня проблема с поиском быстрого пути, который не превышает указанную стоимость. Есть схожий вопрос с этим, однако между ними есть большая разница. Здесь единственными записями, которые могут появиться в данных, являются те, которые ведут от нижней точки к более высокой точке (например, 1 -> 3 может появиться, но 3 -> 1 может не появиться) (см. Ниже). Не зная этого, я бы использовал Дейкстру. Эта дополнительная информация может позволить сделать это быстрее, чем алгоритм Дейкстры. Что вы думаете об этом?

Допустим, у меня указана максимальная стоимость и 4 записи.

// specified cost
    10 
// end point
    5
//(start point) (finish point) (time) (cost)
    2 5 50 5
    3 5 20 9
    1 2 30 5
    1 3 30 7
// all the records lead from a lower to a higher point no.

Я должен решить, возможно ли добраться из пункта (1) в (5) (это невозможно, когда нет пути, который стоит <=, чем у нас, или когда нет связи между 1-5) и если да, то что был бы самый быстрый способ попасть туда.

Выход для таких данных будет:

80 // fastest time
3 1 // number of points that (1 -> 2)  -> (2 -> 5)

Имейте в виду, что если есть запись о том, что вы можете двигаться 1->2

1 2 30 5

Это не позволяет вам двигаться 2<-1.

1 ответ

Для каждого узла на глубине n минимальная стоимость пути к нему равна n/2 * (minimal first edge at the path + minimal edge connecting to the node) - сумма арифметических рядов. Если это вычисление превышает требуемый максимум, нет необходимости проверять следующие узлы. Отрежьте эти узлы и примените Дейкстру к остальным.

Другие вопросы по тегам