ダイクストラの最短経路アルゴリズム
実現を参照してください:https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-using-priority_queue-stl/
なお、PRIORITY_QUEUEと内部素子は、私たちが直接参加する新しい距離PQに、distの同じ時間を更新し、更新することはできません。そこdistの時代遅れでPQが、距離が長すぎるされているが、それらはdistのに更新されません。
// Uを通じてVへのパスが短絡した場合。 もし(DIST [V]> DIST [U] + 重量){ // V族の更新距離 DIST [V] = DIST [U] + 重量。 pq.push(make_pair(DIST [V]、V))。 }
Oの時間複雑(ElogV)
K停止以内787安い航空券
問題の本質は、ダイクストラの最短経路アルゴリズムですが、制約ステップを追加しました。
クラスのソリューション{ パブリック: typedefはタプル < int型、int型、int型 > TI; // (DIST、U、ステップ) 構造体のエッジ{ int型の端部、 int型の重量; }。 INT findCheapestPrice(整数 nは、ベクトル<ベクトル< INT >>&便、INT SRC、INT DST、INT K){ ベクトル <ベクトル<エッジ>>グラフ(N、ベクトル<エッジ> ()); 以下のための(自動飛行:便){ グラフ[フライト[ 0]一back({フライト[ 1 ]、フライト[ 2 ]})。 } PRIORITY_QUEUE <TI、ベクトル<TI>、大きな<TI >> Q。 q.emplace(0、SRC、K + 1 )。 一方、(!q.empty()){ オート[DIST、U、ステップ] = q.top()。q.pop(); もし(uは== DST)の戻りDIST。 場合(ステップ== 0)続けます。 用([W V、】自動:グラフ[U]){ q.emplace(DIST + W、V、工程- 1 )。 } } リターン - 1 。 } }。