DAG单源最短路径

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

 

对于有向无环图DAG求单源最短路径,可以按照图中节点的拓扑顺序来求路径。

伪代码:

[c-sharp]  view plain copy
  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)。

 

 

求关键路径时,可以通过把边权值取负值来实现。

 

 

你可能感兴趣的:(DAG,单源最短路径,关键路径)