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 定義 作業系統就是乙個協調 管理和控制計算機硬體資源和軟體資源的控制程式 作業系統位於計算機硬體與應用軟體之間,本質也是乙個軟體。作業系統由作業系統的核心 執行於核心態,管理硬體資源 以及系統呼叫 執行於使用者態,為應用程式設計師寫的應用程式提供系統呼叫...