代码随想录打卡|Day51 图论(dijkstra(堆优化版)精讲、Bellman_ford 算法精讲)

article/2025/8/25 2:43:08

图论part09

dijkstra(堆优化版)精讲(不熟悉)

代码随想录链接
题目链接

在这里插入图片描述
在这里插入图片描述

import java.util.*;class Edge {int to;  // 邻接顶点int val; // 边的权重Edge(int to, int val) {this.to = to;this.val = val;}
}class MyComparison implements Comparator<Pair<Integer, Integer>> {@Overridepublic int compare(Pair<Integer, Integer> lhs, Pair<Integer, Integer> rhs) {return Integer.compare(lhs.second, rhs.second);}
}class Pair<U, V> {public final U first;public final V second;public Pair(U first, V second) {this.first = first;this.second = second;}
}public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();List<List<Edge>> grid = new ArrayList<>(n + 1);for (int i = 0; i <= n; i++) {grid.add(new ArrayList<>());}for (int i = 0; i < m; i++) {int p1 = scanner.nextInt();int p2 = scanner.nextInt();int val = scanner.nextInt();grid.get(p1).add(new Edge(p2, val));}int start = 1;  // 起点int end = n;    // 终点// 存储从源点到每个节点的最短距离int[] minDist = new int[n + 1];Arrays.fill(minDist, Integer.MAX_VALUE);// 记录顶点是否被访问过boolean[] visited = new boolean[n + 1];// 优先队列中存放 Pair<节点,源点到该节点的权值>PriorityQueue<Pair<Integer, Integer>> pq = new PriorityQueue<>(new MyComparison());// 初始化队列,源点到源点的距离为0,所以初始为0pq.add(new Pair<>(start, 0));minDist[start] = 0;  // 起始点到自身的距离为0while (!pq.isEmpty()) {// 1. 第一步,选源点到哪个节点近且该节点未被访问过(通过优先级队列来实现)// <节点, 源点到该节点的距离>Pair<Integer, Integer> cur = pq.poll();if (visited[cur.first]) continue;// 2. 第二步,该最近节点被标记访问过visited[cur.first] = true;// 3. 第三步,更新非访问节点到源点的距离(即更新minDist数组)for (Edge edge : grid.get(cur.first)) { // 遍历 cur指向的节点,cur指向的节点为 edge// cur指向的节点edge.to,这条边的权值为 edge.valif (!visited[edge.to] && minDist[cur.first] + edge.val < minDist[edge.to]) { // 更新minDistminDist[edge.to] = minDist[cur.first] + edge.val;pq.add(new Pair<>(edge.to, minDist[edge.to]));}}}if (minDist[end] == Integer.MAX_VALUE) {System.out.println(-1); // 不能到达终点} else {System.out.println(minDist[end]); // 到达终点最短路径}}
}

Bellman_ford 算法精讲(不熟悉)

代码随想录链接
题目链接

在这里插入图片描述
在这里插入图片描述

代码

import java.util.*;public class Main {// 定义边的数据结构static class Edge {int from;  // 边的起点int to;    // 边的终点int val;   // 边的权值(距离/成本)// 构造函数public Edge(int from, int to, int val) {this.from = from;this.to = to;this.val = val;}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 1. 输入处理int n = sc.nextInt();  // 节点数(编号1~n)int m = sc.nextInt();  // 边数List<Edge> edges = new ArrayList<>();  // 存储所有边// 读取每条边的信息for (int i = 0; i < m; i++) {int from = sc.nextInt();int to = sc.nextInt();int val = sc.nextInt();edges.add(new Edge(from, to, val));  // 添加到边列表}// 2. 初始化距离数组int[] minDist = new int[n + 1];  // minDist[i]表示节点1到节点i的最短距离Arrays.fill(minDist, Integer.MAX_VALUE);  // 初始化为无穷大minDist[1] = 0;  // 起点到自身的距离为0// 3. Bellman-Ford 核心算法:松弛操作for (int i = 1; i < n; i++) {  // 最多进行n-1轮松弛boolean updated = false;  // 标记本轮是否更新for (Edge edge : edges) {// 如果起点可达,且通过当前边可以缩短距离if (minDist[edge.from] != Integer.MAX_VALUE && minDist[edge.from] + edge.val < minDist[edge.to]) {minDist[edge.to] = minDist[edge.from] + edge.val;  // 更新最短距离updated = true;  // 标记有更新}}if (!updated) break;  // 提前终止:如果本轮未更新,说明已收敛}// 4. 输出结果if (minDist[n] == Integer.MAX_VALUE) {System.out.println("unconnected");  // 终点不可达} else {System.out.println(minDist[n]);  // 输出最短距离}}
}

http://www.hkcw.cn/article/olGqwXxSNy.shtml

相关文章

RS232/485转Profinet网关通讯气体检漏仪案例分享

RS232/485转Profinet网关通讯气体检漏仪案例分享 RS232转Profinet网关作为一种重要的工业通讯设备&#xff0c;其作用是将传统的RS232接口设备转换为现代的Profinet接口&#xff0c;从而实现与现代自动化控制系统的无缝对接&#xff0c;提高系统的集成度和性能。 气体检漏仪作…

电感专题归纳

文章目录 6.2.1 概念6.2.1x 电感电流6.2.2 储能6.2.3 伏秒原则6.2.4 电感元件6.2.5 电感充放电 6.3 换路定则6.4 储能总结6.5 串并联6.5.1 电容串联6.5.2 电容并联6.5.4 电感串联6.5.5电感并联6.5.3 电容与电导 6.6 电容与电感的滤波 电感在电路中的坐拥只有两个字&#xff0c;…

2023-ICLR-ReAct 首次结合Thought和Action提升大模型解决问题的能力

关于普林斯顿大学和Google Research, Brain Team合作的一篇文章, 在语言模型中协同Reasoning推理和Action行动。 论文地址&#xff1a;https://arxiv.org/abs/2210.03629 代码&#xff1a;https://github.com/ysymyth/ReAct.git 其他复现 langchain &#xff1a;https://pytho…

吴艳妮落泪道歉 带伤参赛憾失金牌

5月29日,在亚洲田径锦标赛女子100米栏决赛中,吴艳妮以13秒07的成绩获得铜牌。赛后她走路有些一瘸一拐。在接受采访时,吴艳妮哽咽着向大家道歉:“很感谢你们来现场为我加油,没为中国队拿到这个冠军,很对不起大家。我的伤还没养好,不想为自己过多的解释,我还是觉得我在亚…

群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案

群辉&#xff08;synology&#xff09;NAS老机器连接出现网页端可以进入&#xff0c;但是本地访问输入一样的账号密码是出现错误时解决方案 老机器 装的win7 系统 登入后端网页端的时候正常&#xff0c;但是本地访问登入时输入登入网页端一样的密码时候出现问题解决方案 1.登…

力扣每日一题——连接两棵树后最大目标节点数目 ||

目录 题目链接&#xff1a;3373. 连接两棵树后最大目标节点数目 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;​​双树贡献分离法​​ Java写法&#xff1a; C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 总结 题目链接&#xff1a;…

国芯思辰| 国产四通道24位生理电采集模拟前端AFE全面替换ADS1294R,心电贴性能再飞跃

心电贴作为一种便捷的可穿戴医疗设备&#xff0c;能够实时、连续地监测心电信号&#xff0c;为心脏健康保驾护航。其中高性能、低功耗的AFE芯片是关键核心部件&#xff0c;集成国产四通道24位AFE的三导联心电贴&#xff0c;不仅更小、更轻、还更准、续航更长、监测维度更多&…

Linux线程池(上)(33)

文章目录 前言一、线程池的概念池化技术线程池的优点线程池的使用场景 二、线程池的实现v1版本v2版本 总结 前言 终于要结束了&#xff0c;写完这篇再来篇有关锁的文章&#xff0c;我们就可以结束 Linux系统编程 部分啦&#xff01; 线程池是一种管理线程的机制&#xff0c;它可…

Python 之图片添加时间戳水印

依赖安装 pip install pillow 原图 随便找个图片作为原图即可&#xff08;比如截图一个桌面背景图&#xff09;。 test.png 添加水印 from PIL import Image, ImageDraw, ImageFont import datetimedef add_timestamp_watermark(image_path, font_size24):# 打开图片imag…

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab&#xff0c;本文介绍将二者结合使用 项目源码上传至gitee提供公网访问&#xff1a;https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

深入了解linux系统—— 库的链接和加载

一、目标文件 我们知道源文件经过编译链接形成可执行程序&#xff0c;在Windows下这两个步骤被IDEA封装的很完美&#xff0c;我们使用起来也非常方便&#xff1b; 在Linux中&#xff0c;我们可以通过gcc编译器来完成编译链接这一系列操作。 而源文件经过编译形成.o文件&…

Cesium 8 ,在 Cesium 上实现雷达动画和车辆动画效果,并控制显示和隐藏

目录 ✨前言 一、功能背景 1.1 核心功能概览 1.2 技术栈与工具 二、车辆动画 2.1 模型坐标 2.2 组合渲染 2.3 显隐状态 2.4 模型文件 三、雷达动画 3.1 创建元素 3.2 动画解析 3.3 坐标联动 3.4 交互事件 四、完整代码 4.1 属性参数 4.2 逻辑代码 加载车辆动画…

ElasticSearch简介及常用操作指南

一. ElasticSearch简介 ElasticSearch 是一个基于 Lucene 构建的开源、分布式、RESTful 风格的搜索和分析引擎。 1. 核心功能 强大的搜索能力 它能够提供全文检索功能。例如&#xff0c;在海量的文档数据中&#xff0c;可以快速准确地查找到包含特定关键词的文档。这在处理诸如…

Transformer《Attention is all you need》

发布时间&#xff1a;2017/06/12 发布单位&#xff1a;Google、多伦多⼤学 简单摘要&#xff1a;直译为“变换器”&#xff0c;⼀种采⽤⾃注意⼒机制的深度学习模型&#xff0c;按照输⼊数据各部分重要 性不同⽽分配不同权重。⼴泛⽤于NLP和CV领域。 阅读重点&#xff1a;s…

html+css+js趣味小游戏~HexGL赛车竞速(附源码)

下面是一个简单的记忆卡片配对游戏的完整代码&#xff0c;使用HTML、CSS和JavaScript实现&#xff1a; html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

VL 中间语言核心技术架构:构建全链路开发生态

一、VL 中间语言核心架构&#xff1a;全链路开发的三大关键层级 在企业级应用开发面临效率与技术深度双重挑战的背景下&#xff0c;iVX 自主研发的 VL&#xff08;Visual Language&#xff09;中间语言体系&#xff0c;通过 "可视化建模 - 语义编译 - 多端适配" 三大…

GPU 图形计算综述 (二):固定管线

在计算机图形学中&#xff0c;图形管线&#xff08;Graphics Pipeline&#xff09;是指通过一系列软硬件算法&#xff0c;将三维空间中的物体表征&#xff0c;转换为二维空间的物体表征的过程。一般通过3D网格&#xff08;Mesh&#xff09;等图元&#xff08;Primitive&#xf…

Manus数据手套:赋能人形机器人遥操作与AI数据训练的创新力量

人形机器人技术与AI技术正在进入蓬勃发展的黄金时代。特斯拉高调发布其即将推向市场的人形机器人Optimus&#xff0c;引发全球瞩目&#xff1b;与此同时&#xff0c;国内人形机器人产业也如雨后春笋般迅速崛起&#xff0c;展现出强劲的发展势头。在这一技术浪潮中&#xff0c;M…

C# 控制台程序实现定时自动退出

一、基础实现方式&#xff1a;同步阻塞等待 通过Thread.Sleep暂停主线程&#xff0c;适合简单场景&#xff08;需阻塞当前线程&#xff09;。 static void Main(string[] args) { Console.WriteLine("程序启动&#xff0c;5秒后自动退出..."); Thread.Slee…

【笔记】suna部署之获取 Firecrawl API key

#工作记录 Firecrawl 一、前期准备 在进行 Suna 部署时&#xff0c;获取 Firecrawl API key 是其中一个关键步骤。Firecrawl 是一款功能强大的工具&#xff0c;在 Suna 项目中可发挥重要作用&#xff0c;比如助力数据获取等相关任务。 二、获取步骤 &#xff08;一&#xff…