1。 肯定不能用dijkstra算法,這是因為,Dijkstra算法的大致思想是每次選擇距離源點最近的結點加 入,然后更新其它結點到源點的距離,直到所有點都被加入為止。當每次選擇最短的路改為每次選擇最長路的時候,出現了一個問題,那就是不能保證現在加入的結 點以后是否會被更新而使得到源點的距離變得更長,而這個點一旦被選中將不再會被更新。例如這次加入結點u,最長路為10,下次有可能加入一個結點v,使得 u通過v到源點的距離大於10,但由於u在之前已經被加入到集合中,無法再更新,導致結果是不正確的。
如果取反用dijkstra求最短路徑呢,記住,dijkstra不能計算有負邊的情況。。。
2.
可 以用 Bellman-Ford 算法求最長路徑,只要把圖中的邊權改為原來的相反數即可。也可以用Floyd-Warshall 算法求每對節點之間的最長路經,因為最長路徑也滿足最優子結構性質,而Floyd算法的實質就是動態規划。但是,如果圖中含有回路,Floyd算法並不能 判斷出其中含有回路,且會求出一個錯誤的解;而Bellman-Ford算法則可以判斷出圖中是否含有回路。
3. 如果是有向無環圖,先拓撲排序,再用動態規划求解。