DAG單源最短路徑

轉自:http://blog.csdn.net/wenlei_zhouwl/article/details/6008115

 

對於有向無環圖DAG求單源最短路徑,可以按照圖中節點的拓撲順序來求路徑。

僞代碼:

[c-sharp] view plaincopy
  1. DagShortestPath(G, w, s)  
  2. {  
  3.     topologically sort the nodes in G  
  4.     //initialization  
  5.     for each vertex v in G  
  6.     {  
  7.         distance[v] = infinite  
  8.         parent[v] = NULL;  
  9.     }  
  10.     distance[s] = 0  
  11.     for each vertex v in G, taken in topologically sorted order  
  12.     {  
  13.         //relax  
  14.         for each edge w[u][v]  
  15.         {  
  16.             if (distance[v] > distance[u] + w[u][v])  
  17.             {  
  18.                 distance[v] = distance[u] + w[u][v]  
  19.                 parent[v] = u  
  20.             }  
  21.         }  
  22.     }  
  23. }   

該算法的複雜度爲O(V + E)。
該算法的正確性可由路徑鬆弛原理證得:對於節點v,如果s->v存在最短路徑(v0, v1, ..., vk),則只要保證路徑被鬆弛的順序爲(v0, v1),(v1, v2),...,(vk-1, vk)。

 

 

求關鍵路徑時,可以通過把邊權值取負值來實現。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章