演算法儲備之Bellman Ford演算法

2021-08-09 23:48:43 字數 766 閱讀 9063

bellman-ford演算法也是求圖的單源點最短路徑問題。

不同於dijkstra演算法的是它能應用於帶負權值邊的圖,並且可以判斷圖中是否有負迴圈。

該演算法的時間複雜度為o(ve) more than dijkstra演算法。

v為頂點個數

dist[v]陣列記錄所有頂點到源點的距離

執行v-1次迴圈

每次迴圈對每一條邊執行如下操作

if(dist[v]>dist[u]+weight of edge uv)

dist[v]=dist[u]+weight;

執行第v次以上操作,若dist陣列有改動則圖中有負迴圈

#include #include using namespace std;

struct edge

};struct graph

void addedge(int src, int dest, int weight);

void bellmanford(int src);

};void graph::addedge(int src, int dest, int weight)

void printsolution(vector& dist)

void graph::bellmanford(int src)

} for (edge e : edge) }

printsolution(dist);

return;

}int main()

演算法儲備之Floyd Warshall演算法

floyd warshall演算法是動態規劃的經典演算法 該演算法可以解決圖中每個頂點到其他頂點的距離,圖中可以有負權值邊,但不能有負迴圈。時間複雜度為o v的三次方 演算法思想 dist v v 初始化為二維陣列edge v v 的內容 for迴圈執行v次,每次以乙個頂點為中間頂點,更新所有頂點通...

演算法儲備之Dijkstra演算法求單源點最短路徑

迪傑斯特拉演算法求單元點最短路徑,圖的儲存結構為鄰接矩陣 在找最短距離和更新距離時都用for迴圈遍歷結點數 時間複雜度為o v include include include define v 9 int mindistance int dist,bool sptset return min ind...

python之併發程式設計儲備知識

1.3 作業系統的作用 2 多道技術 1.1 定義 作業系統就是乙個協調 管理和控制計算機硬體資源和軟體資源的控制程式 作業系統位於計算機硬體與應用軟體之間,本質也是乙個軟體。作業系統由作業系統的核心 執行於核心態,管理硬體資源 以及系統呼叫 執行於使用者態,為應用程式設計師寫的應用程式提供系統呼叫...