最短路径算法笔记

    public int networkDelayTime(int[][] times, int N, int K) {
        int[] dist = new int[N+1];
        for (int i=0;i<N+1;i++){
            dist[i] = Integer.MAX_VALUE;
        }
        dist[K]=0;
        

        for (int i=0;i<N;i++){
            for (int j=0;j<times.length;j++){
                int u = times[j][0];
                int v = times[j][1];
                int w = times[j][2];
                if(dist[u]!=Integer.MAX_VALUE&&dist[v]>dist[u]+w){
                    dist[v]=dist[u]+w;
                }
            }
        }
        int res = 0;
        for (int i=1;i<dist.length;i++){
            if(res<dist[i])res = dist[i];
        }
        return res == Integer.MAX_VALUE ? -1 : res;
    }

//Bellman-Ford每次找到更新后的点,实际上到不了N次就收敛了,若还不收敛说明有负权回路,不是从源头开始迭代,松弛时不确保父节点已确定,因此做了很多无用功
//SPFA加入队列,从源头开始迭代,松弛时不确保父节点已确定,将松弛后的点入队
//Dijstra从源头开始迭代,找邻接点
//Floyd矩阵表示,思想同Bellman-Ford

原文地址:https://www.cnblogs.com/0xcafe/p/10267433.html