圖論中 求路徑 的經典算法
Dijstra 算法 並不能計算 含有 負值權重的情況: 是用來求最短路徑的算法。----> 廣度優先 + 貪心算法
Dijstral 算法 是求 一個到1個的算法 ,
但 floyd是求 所有節點之間的路徑的算法。
時間複雜度 都是 O(N^3)
力扣 743題: 網絡時延問題 :
https://leetcode-cn.com/problems/network-delay-time/
下面用 Floyd 算法進行實現:
class Solution {
public:
int networkDelayTime(vector<vector<int>>& times, int N, int K) {
vector<vector<int>> dp(N+1, vector<int>(N+1, INT_MAX/2));
for(int i=1; i<=N; ++i)
dp[i][i] = 0;
for(auto& t: times)
dp[t[0]][t[1]] = min(dp[t[0]][t[1]],t[2]);
for(int k=1; k<=N; ++k)//插入一個新節點後會有什麼影響
for(int i=1; i<=N; ++i)
for(int j=1; j<=N; ++j)
dp[i][j]=min(dp[i][j], dp[i][k]+dp[k][j]);
// 所有時延中 獲取最大的 看會不會到達?
int ret = 0;
for(int i=1; i<=N; ++i)
ret = max(ret, dp[K][i]);
return (ret == INT_MAX/2) ? -1 : ret;
}
};