• 最短路径算法笔记


        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

  • 相关阅读:
    裴蜀定理
    上下界网络流
    寻找符合子序列要求的区间个数
    小猪分配 , 最大流
    floyd + 最大流 (奶牛分配问题)
    抛硬币问题
    消消乐
    Entity Framework(1)
    冒泡排序
    二分法查找数据
  • 原文地址:https://www.cnblogs.com/0xcafe/p/10267433.html
Copyright © 2020-2023  润新知