单源最短路 SPFA 算法模板
生活随笔
收集整理的這篇文章主要介紹了
单源最短路 SPFA 算法模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
在圖論中,最短路是十分重要的一部分,在很多問題中都有涉及
而現在所講的 SPFA 算法是十分優秀的算法,時間復雜度為 O(k?E)
其中 E 是圖的邊數,而 k 是一個常數,一般極小。
事實上 SPFA 就是在 Bellman-ford 算法的基礎上加上一個隊列優化,減少了冗余的松弛操作,是一種高效的最短路算法。
而且 SPFA 還能判負環,這種情況下類似 Dijkstra 算法等便沒有了用武之地!
用法
在隊列中進行,在點出隊入隊中更新值
SPFA算法(BFS)模板如下:
注釋:其中 que[] 為隊列,dis[] 為點到源點距離,l,r 分別左右指針,bz[] 為標志->點是否入隊。
SPFA算法(DFS)模板如下:
判負環
SPFA算法還有一個大優點是可以判負環
利用 SPFA 算法判斷負環有兩種方法:
- SPFA算法 的 dfs 形式,判斷條件是 存在一點在一條路徑上出現多次。
- SPFA算法 的 bfs 形式,判斷條件是 存在一點入隊次數大于總頂點數。
總結
- SPFA算法效率高,實用性強,是很有用的算法!
總結
以上是生活随笔為你收集整理的单源最短路 SPFA 算法模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 3853. 【NOIP2014
- 下一篇: JZOJ 3870. 【NOIP2014