Общий подход к таким проблемам обычно описывается как «многоуровневое».Вы (концептуально) делаете K + 1 копию графика, G 0 до G K , а затем соединить вершину u i в G i к вершине v i + 1 in G i + 1 , еслиесть грань от v до u в G .
Путь от s 0 в G 0 до т i в G i затем представляет путь от s до t в G , который использует i обратных ребер, где i - самое большее K .
Вы можете просто использовать алгоритм Дейкстры на этом новом многоуровневом графе.
Когда вы привыкнете к этому, вы можетеПодумайте об этом еще проще: вы просто используете алгоритм Дейкстры, но вместо того, чтобы иметь состояния в очереди, такие как [достигнут v , со стоимостью c ], вы используете состояния, такие как [достигнут v , со стоимостью c , используя i обратные края].Часто, когда мы используем Дейкстру в реальной жизни, фактический граф не дается, поэтому он помогает воспринимать его как поиск по состояниям и их переходам.