【Dijkstra演算法】未優化版+優先佇列優化版

折騰怪發表於2020-12-18

https://blog.csdn.net/YF_Li123/article/details/74090301

 

Dijkstra演算法虛擬碼:

//G為圖;陣列d為源點到達各點的最短路徑長度,s為起點
Dijkstra(G, d[], s)
{
     初始化;
     for(迴圈n次)
     {
          u = 使d[u]最小的還未被訪問的頂點的標號;
          記u已被訪問;
          for(從u出發能到達的所有頂點v)
          {
               if(v未被訪問 && 以u為中介點使s到頂點v的最短距離d[v]更優)
               {
                    優化d[v];
               }
          }
     }
}

鄰接表:

const int INF = 1000000000;
 
struct Node
{
       int v;         //邊的目標頂點
       int dis;       //dis為邊權
       Node(int x, int y) :v(x), dis(y) {}
};
 
void Dijkstra(int n, int s, vector<vector<Node>> Adj, vector<bool> vis, vector<int>& d)
{
       /*
       param
       n:      頂點個數
       s:      起點
       Adj:    圖的鄰接表
       vis:    標記頂點是否被訪問
       d:      儲存起點s

相關文章