差分約束:解決知足條件的不等式
爲了保證圖連通,引入附加點vs,使圖中每一個點vi到vs均可達,設弧<vs, vi>的權w(vs, vi)=0.
對於每一個差分約束xj-xi<=bk,則弧<vj, vi>權值爲bk;
初始化dis[vs]=0, dis[vi]=INF;
而後求以vs爲源點的最短路徑。因爲存在負權值,所以能夠用Spfa算法求
spfa算法:
1.將源點加入隊列, dis[s]=0, 其餘點爲無窮大
2.將隊頭取出標記爲front,遍歷與他相鄰的點x;
3.若是dis[x]>dis[front]+edge[x].value即源點到x的距離大於源點到front的距離+front到x點的距離,更新dis[x].
而且若是x不在隊列中將它入隊.重複步驟2
4.若是某一點出隊的次數大於n-1,證實存在負環,沒法計算單源最短路算法