当前位置: 首页 > article >正文

Day59 图论part09

今天的建议依然是,一刷的时候,能了解 原理,照着代码随想录能抄下来代码就好,就算达标。

二刷的时候自己尝试独立去写,三刷的时候 才能有一定深度理解各个最短路算法。

dijkstra(堆优化版)精讲

代码随想录

超时版:

import java.util.*;

public class Main{
    public static void main (String[] args) {
        //dijkstra算法三部曲
        //1.找到距离源节点最近的点,且未访问
        //2.把该点标记为已经访问
        //3.更新其他点到源节点的距离
        
        Scanner scanner = new Scanner(System.in);
        
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        
        //构造邻接表
        
        List<List<Edge>> graph = new ArrayList<>(n+1);
        
        for(int i = 0; i <= n; i++){
            graph.add(new ArrayList<>());
        }
        
        for(int i = 0; i < m; i++){
            int star = scanner.nextInt();
            int end = scanner.nextInt();
            int val =  scanner.nextInt();
            graph.get(star).add(new Edge(star, end, val));
        }
        
        int[] minDist = new int[n+1];
        Arrays.fill(minDist, Integer.MAX_VALUE);
        PriorityQueue<int[]> pq = new PriorityQueue<>((a,b) -> Integer.compare(a[1], b[1]));
        boolean[] isVisited = new boolean[n+1];
        
        minDist[1] = 0;
        pq.add(new int[]{1,minDist[1]});
       // isVisited[1] = true;
        //找到距离源节点最近的点
        //把该点标记为已经访问
        //更新其他点到源节点的距离
        
        while(!pq.isEmpty()){
            int[] pair = pq.poll();
            int point = pair[0];
            if(isVisited[point]){
                continue;
            }
            isVisited[point] = true;
            for(Edge edge : graph.get(point)){
                if(!isVisited[edge.end

http://www.kler.cn/a/457937.html

相关文章:

  • 【Spark】架构与核心组件:大数据时代的必备技能(下)
  • perl:多线程 简单示例
  • svn分支相关操作(小乌龟操作版)
  • Spring Certified Professional 2024 (2V0-72.22)
  • Keil中的gcc
  • C语言实现贪吃蛇游戏
  • Lumos学习王佩丰Excel第二十三讲:饼图美化与PPT图表
  • 添砖java第四更@(+)@
  • 594: Maximum Tape Utilization Ratio
  • netcat和nmap的区别
  • C++ 设计模式:桥接模式(Bridge Pattern)
  • imgproxy图像处理的高效与安全
  • 语言模型评价指标
  • Android笔试面试题AI答之Android基础(5)
  • stm32系列MCU介绍
  • 4.FPGA如何实现设计
  • 动态规划四——子序列系列
  • 回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测
  • 基于Qt中QMessageBox类的登陆界面对话框应用
  • springBoot使用groovy脚本
  • vulnhub靶场【Hotwarts】之Dobby
  • 基于NLP的医学搜索相关性判断
  • 【MySQL -- 安装】Ubuntu下安装MySQL
  • AE/PR智能视频变速补帧插帧慢动作插件 Aescripts SpeedX v1.2.0.1 Win/Mac
  • 编译原理学习笔记——CH7-Runtime Environments运行时环境
  • Hive刷分区MSCK