力扣labuladong——一刷day84

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣743. 网络延迟时间](#一、力扣743. 网络延迟时间)

前言

Dijkstra 算法(一般音译成迪杰斯特拉算法)无非就是一个 BFS 算法的加强版,它们都是从二叉树的层序遍历衍生出来的


一、力扣743. 网络延迟时间

java 复制代码
class Solution {
    public int networkDelayTime(int[][] times, int n, int k) {
        List<int[]>[] graph = new LinkedList[n+1];
        for(int i = 1; i <= n; i ++){
            graph[i] = new LinkedList<int[]>();
        }
        for(int[] time : times){
            int from = time[0];
            int to = time[1];
            int w = time[2];
            graph[from].add(new int[]{to,w});
        }
        int[] result = dijkstra(k,graph);
        int res = 0;
        for(int i = 1; i < result.length; i ++){
            if(result[i] == Integer.MAX_VALUE){
                return -1;
            }
            res = Math.max(res,result[i]);
        }
        return res;
    }
    class State{
        int id;
        int distFromStart;
        public State(int id, int distFromStart){
            this.id = id;
            this.distFromStart = distFromStart;
        }
    }
    public int[] dijkstra(int start, List<int[]>[] graph){
        int n = graph.length;
        int[] result = new int[n];
        PriorityQueue<State> pq = new PriorityQueue<>(
            (a,b)->{
                return a.distFromStart - b.distFromStart;
            }
        );
        Arrays.fill(result,Integer.MAX_VALUE);
        result[start] = 0;
        pq.offer(new State(start,0));
        while(!pq.isEmpty()){
            State curV = pq.poll();
            int curId = curV.id;
            int curDistFromStart = curV.distFromStart;
            if(curDistFromStart > result[curId]){
                continue;
            }
            for(int[] next : graph[curId]){
                int nextId = next[0];
                int nextDist =  result[curId] + next[1];
                if(result[nextId] > nextDist){
                    result[nextId] = nextDist;
                    pq.offer(new State(nextId, result[nextId]));
                }
            }
        }
        return result;
    }
}
相关推荐
范纹杉想快点毕业4 分钟前
以项目的方式学QT开发(三)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·qt·mysql·算法·命令模式
补三补四6 分钟前
随机森林(Random Forest)
人工智能·科技·算法·随机森林·机器学习
轮到我狗叫了9 分钟前
力扣.1471数组的k个最强值,力扣.1471数组的k个最强值力扣1576.替换所有的问号力扣1419.数青蛙编辑力扣300.最长递增子序列
java·数据结构·算法
秋野酱19 分钟前
基于SpringBoot的家政服务系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
趁你还年轻_21 分钟前
常用的Java工具库
java
敲代码的瓦龙22 分钟前
STL?list!!!
c语言·开发语言·数据结构·c++·windows·list
不再幻想,脚踏实地27 分钟前
Spring Boot 日志
java·spring boot·后端
赵青临的辉29 分钟前
常见机器学习算法简介:回归、分类与聚类
算法·机器学习·回归
程序员莫小特30 分钟前
【GESP真题解析】第 20 集 GESP 二级 2025 年 3 月编程题 1:等差矩阵
c语言·数据结构·c++·算法·青少年编程·矩阵
weixin_3870021536 分钟前
使用GmSSL v3.1.1实现SM2证书认证
算法·安全·区块链·密码学·ssl