[概念学習]Dijkstraアルゴリズム


📒Dijkstra Algorithm


Dijkstraアルゴリズムとは?


DPを使用して、あるノードから別の残りのノードへの最短パスナビゲーションアルゴリズム.
ただし、負のパスがある場合は使用できません.

とくせい


📌特長

  • は、いずれの場合も負のパスが存在しない.
  • は既存経路の重み付け値を使用しているのでDPである.
  • 📌プロセス

  • 出発ノードを設定します.
  • 出発ノードを基準として、最小値をすべて更新します.
  • アクセス
  • アクセスされていない頂点のうち、最小値の重み付けを持つ頂点にアクセスします.
  • を通過した頂点の距離が以前に記録された値よりも小さい場合、距離が更新される.
  • 📌インプリメンテーション

    void Dijkstra_Using_Heap()
    {
        priority_queue<pair<int, int>> PQ;
        PQ.push(make_pair(0, Start));
        Dist[Start] = 0;
     
        while (PQ.empty() == 0)
        {
            int Cost = -PQ.top().first;
            int Cur = PQ.top().second;
            PQ.pop();
     
            for (int i = 0; i < Vertex[Cur].size(); i++)
            {
                int Next = Vertex[Cur][i].first;
                int nCost = Vertex[Cur][i].second;
     
                if (Dist[Next] > Cost + nCost)
                {
                    Dist[Next] = Cost + nCost;
                    PQ.push(make_pair(-Dist[Next], Next));
                }
            }
        }
     
        for (int i = 1; i <= V; i++)
        {
            if (Dist[i] == INF) cout << "INF" << endl;
            else cout << Dist[i] << endl;
        }
    }
    出典:https://yabmoons.tistory.com/364[YAP'sCoding World...]

    📌関連する問題

  • プログラマ-送信