最長路徑算法


1。 肯定不能用dijkstra算法,這是因為,Dijkstra算法的大致思想是每次選擇距離源點最近的結點加 入,然后更新其它結點到源點的距離,直到所有點都被加入為止。當每次選擇最短的路改為每次選擇最長路的時候,出現了一個問題,那就是不能保證現在加入的結 點以后是否會被更新而使得到源點的距離變得更長,而這個點一旦被選中將不再會被更新。例如這次加入結點u,最長路為10,下次有可能加入一個結點v,使得 u通過v到源點的距離大於10,但由於u在之前已經被加入到集合中,無法再更新,導致結果是不正確的。

     如果取反用dijkstra求最短路徑呢,記住,dijkstra不能計算有負邊的情況。。。


2.

可 以用   Bellman-Ford   算法求最長路徑,只要把圖中的邊權改為原來的相反數即可。也可以用Floyd-Warshall   算法求每對節點之間的最長路經,因為最長路徑也滿足最優子結構性質,而Floyd算法的實質就是動態規划。但是,如果圖中含有回路,Floyd算法並不能 判斷出其中含有回路,且會求出一個錯誤的解;而Bellman-Ford算法則可以判斷出圖中是否含有回路。


3. 如果是有向無環圖,先拓撲排序,再用動態規划求解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM