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

19839 Dijkstra求最短路1

19839 Dijkstra求最短路1

⭐️难度:中等
🌟考点:Dijkstra、最短路问题
📖
在这里插入图片描述
在这里插入图片描述

📚

import java.util.*;

public class Main {

    static int N = 505;
    static int n;
    final static int INF = 0x3f3f3f3f;  // 一个足够大的数,同时确保不会超int
    static int[] dis = new int[N]; // 记录 点1 到每个人的最短距离
    static boolean[] vis = new boolean[N]; // 记录 该点是否已经被访问
    static ArrayList<int[]>[] g = new ArrayList[N]; // 语法注意

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        n = sc.nextInt();
        int m = sc.nextInt();

        for (int i = 0; i < m; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c = sc.nextInt();
            addEdge(a,b,c);
        }
        dijkstra(1);
        System.out.println(dis[n] == INF ? -1 : dis[n]);
    }

    // 加边
    static void addEdge(int u, int v, int w) {
        if (g[u] == null) g[u] = new ArrayList<>();
        g[u].add(new int[]{v, w});  // 语法注意
    }

    // Dijkstra
    static void dijkstra(int s){
        Arrays.fill(dis,INF); // 一开始标记为 所有点都不可达
        dis[s] = 0;
        for (int c = 1; c <= n; c++) {  // n 个点,所以要遍历 n 次
            int u = -1;  // 找当前要遍历的点,一开始设为-1
            for (int i = 1; i <= n; i++) {
                if(vis[i]) continue;
                if(u == -1 || dis[u] > dis[i]) u = i;  // 找出距离 点1 最近的边(也就是可以确定下来的边)
            }
            vis[u] = true; // 标记为已访问
            if(g[u] == null) continue; // 改 点u 没有可指向边,跳过
            for(int[] e : g[u]){
                int v = e[0];  // 取点
                int w = e[1];  // 取权值
                dis[v] = Math.min(dis[v],dis[u] + w);  // 刷新 点1 到 点v 的最近距离
            }
        }
    }
}

🍎笔记
在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/98281.html

相关文章:

  • kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂
  • c++学习系列----005.c++模板(类模板)
  • 人工智能在自然语言处理中的应用:从理论到实践的探索
  • 在一个scss文件中定义变量,在另一个scss文件中使用
  • 【Linux】——文件(上)
  • 缓存使用纪要
  • mcp 接freecad画齿轮
  • 《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)
  • 阅读分析Linux0.11 /boot/bootsect.s
  • 显示文献是几区的免费科研插件easyScholar
  • 基于盛科CTC7132交换机核心模块
  • SpringBoot (一) 自动配置原理
  • 字典翻转教学
  • 买卖股票的最佳时机(121)
  • Kubernetes对象基础操作
  • 现代几何风海报标签徽标logo设计psai衬线英文字体安装包 Myfonts – Nexa Serif Font Family
  • 精通React JS中的API调用:示例指南
  • RAG基建之PDF解析的“无OCR”魔法之旅
  • ESP-01模块连接手机热点问题及解决方法
  • nacos 外置mysql数据库操作(docker 环境)
  • 如何迁移AxureCloud到新服务器?
  • Jenkins插件安装失败如何解决
  • 惠普(HP)和联想(Lenovo)作为全球两大电脑品牌,并不是简单的“拼接电脑”
  • Vue 中render函数的作用,如何使用它进行更灵活的组件渲染?
  • 代码随想录算法训练营第四十六天|回文子串专题: 647. 回文子串、516.最长回文子序列
  • DSP+AI综合应用案例1——三种波形识别(预告)
  • java网盘项目 目前 文件有分享表 文件夹也要创建分享表吗
  • 伯恩茅斯 vs 曼城
  • Java 输入流到输出流
  • 开发过程中需要安装的浏览器插件