K停止中でダイクストラの最短経路アルゴリズム/ LeetCode 787の格安航空券

ダイクストラの最短経路アルゴリズム

実現を参照してください: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 
    } 
}。

 

おすすめ

転載: www.cnblogs.com/hankunyan/p/11518287.html