最長路【模板】
阿新 • • 發佈:2021-06-29
如果選取dijkstra求取最長路,那麼思想肯定就是選取當前權值最大的點,並且選取最長的路徑。但是這種思想是錯誤的!我們從源點來舉個例子。a—b c表示的是a,b之間的路徑長度為c 1—2 2 1—3 1 3—4 1 4—2 1 我們的目的是求解1到2這兩個點之間的最小距離。然後說一下步驟 我們先將1的路徑權值標記為0,然後壓入優先佇列 然後1出隊,更新2,3。將2,3壓入隊。 然後我們會選取優先佇列裡面權值較大的2出佇列,用2來更新4。 好了,接下來就沒有結點2的事情了,但是此時2到0的最長距離就定格在2。但實際上最長路應該是3. ———————————————— 版權宣告:本文為CSDN博主「Salix_」的原創文章,遵循CCView Code4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。 原文連結:https://blog.csdn.net/qq_41755258/article/details/85015285
直接將所有的邊都取負,然後按照最短路求解就行了。但是對於有環出現的情況,floyed就不行了,我們就需要藉助bellman演算法來判負環。 floyed的實質是動態規劃,不能處理負環。如果點的數量不是特別多的話,可以使用深搜(通過vis陣列標記,看是否會遍歷到之前已經遍歷過的點)。如果點的個數非常多的話,就得使用ford或者是spfa。 bell—ford可以處理負環,也是通過判斷鬆弛的次數是不是超過了N次。 ———————————————— 版權宣告:本文為CSDN博主「Salix_」的原創文章,遵循CCView Code4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。 原文連結:https://blog.csdn.net/qq_41755258/article/details/85015285