Bellman-Ford算法


分類:
單源最短路徑算法。

適用於:
稀疏圖(側重於對邊的處理)。

優點:
可以求出存在負邊權情況下的最短路徑。

缺點:
無法解決存在負權回路的情況。

時間復雜度:
O(NE),N是頂點數,E是邊數。(因為和邊有關,所以不適於稠密圖)

算法思想:
很簡單。一開始認為起點是“標記點”(dis[1] = 0),每一次都枚舉所有的邊,必然會有一些邊,連接着“未標記的點”和“已標記的點”。因此每次都能用所有的“已標記的點”去修改所有的“未標記的點”,每次循環也必然會有至少一個“未標記的點”變為“已標記的點”。算法實現:

 

初始化:dis[s] = 0; dis[v] = oo(v != s); pre[s] = 0;
 
(偽代碼)
for(int i = 1; i <= n - 1; i++)
  for(int j = 1; j <= E; j++)  //注意要枚舉所有邊,不能枚舉點
    if(dis[u] + w[j] < dis[v])  //u, v分別是這條邊連接的兩個點
      {
        dis[v] = dis[u] + w[j]
        pre[v] = u;
      }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM