floyd 算法: 網絡時延

圖論中 求路徑 的經典算法

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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章