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

news/2025/10/6 20:08:38/文章来源:https://www.cnblogs.com/wzzkaifa/p/19127867

图论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>
> {
@Override
public
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.mzph.cn/news/929659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化数据操作平台获3000万美元融资

自动化数据操作平台Pantomath获得3000万美元B轮融资,该平台利用AI技术扩展传统数据可观测性功能,通过自主AI代理实现事件自修复,帮助企业减少数据停机时间并提升数据可靠性。自动化数据操作平台Pantomath获3000万美…

常见排序算法详解与C语言实现 - 详解

常见排序算法详解与C语言实现 - 详解2025-10-06 20:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

网站开发专业介绍pc开奖网站开发

已在内核代码中添加EmbedSky_hello驱动为例&#xff0c;进行内核编译时候出现了一下几个问题&#xff1a;1、在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改“Kconfig”文件&#xff0c;添加如下内容&#xff1a;config EmbedSky_HELLOtristate "TQ2440/SKY2440…

南宁网站建设长春网站配图尺寸

在当今数字化金融时代&#xff0c;股票接口成为连接量化交易策略与金融市场的桥梁&#xff0c;为投资者提供了高效、准确的数据获取和交易执行功能。 一、股票接口的基本原理&#xff1a; 股票接口是量化交易系统的核心组成部分&#xff0c;它负责连接投资者的交易程序与金融市…

深入解析:43. 远程分布式测试实现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【相机基础知识与物体检测】更新中

实用指南:【相机基础知识与物体检测】更新中pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

外贸网站推广方法南昌百度关键词搜索

Windows 网络质量测试 References 保证网络稳定性&#xff0c;建议最大数据包延迟 200ms 以内&#xff0c;数据包最大和最小延迟差 100ms 以内&#xff0c;丢包率最好不丢包或 5% 以内。 ping www.baidu.com -t 调出 运行 (快捷键 Win R)&#xff0c;输入 cmd&#xff0c;pi…

网站用cms如何制作网址内容

SharePoint 2013 单一服务器场环境恢复数据库内容 笑男的公司服务很多客户&#xff0c;当然&#xff0c;这些客户都很挑剔&#xff0c;所以一般情况下生产&#xff08;Prod&#xff09;环境的服务是不能停的。 当然&#xff0c;如果你将包含相同网站集的数据库连接到同一个服务…

文化类网站建设福州seo推广外包

网上很多代码都略显繁琐&#xff0c;看了一下yy dalao的代码感觉很好&#xff0c;但他懒得打题解&#xff08;好吧我也是 以0为根节点的话&#xff0c;我把yy的一段代码删了改用fail[c]x0?0:ch[fail[x]][i];来实现特判&#xff0c;效果还不错&#xff01;也算是AC自动机的模版…

广州网站建设推广网站建设及推广开发

根据html&#xff1a;可知div是块级标签&#xff0c;span是行级标签 这里view类似于div&#xff0c;text类似于span&#xff0c;即 块级标签&#xff1a;view 行级标签&#xff1a;text、icon 类似效果 两个icon图标&#xff0c;置于第一排 两个view&#xff0c;分别位于第…

在上海哪个网站比较好自己在家可以做网站吗

在使用web-view时发现了一个问题总是会过段时间自己跳转到web-view是src地址 由于我是写的轮播图中嵌套一个web-view 所以当时我以为是轮播图和这个web-view冲突了 其实设计就是如此 自己跳 <view class"page-body"><web-view src"{{url}}">&…

AtCoder Beginner Contest 422 游记(VP)

很快过 $3t$,D 题稍微卡顿,E 题一堆垃圾错误。省流 很快过 \(3t\),D 题稍微卡顿,E 题一堆垃圾错误。10.6 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 本来在补 \(2023CCPCHarbin\) 的题目,做到最小生成…

详细介绍:无人机光纤FC接口模块技术分析

详细介绍:无人机光纤FC接口模块技术分析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

2025 --【J+S 二十连测】-- 第十三套 总结

总结 T1 T3 考试时很快就写出了代码,没什么问题 T2 考试时很快就写出了代码,但思路不严谨,故失分 T4 T5 考试时很快就写出了部分分代码,无失分 题解 T1 利用最近学的数学方法即可 代码 #include<bits/stdc++.h&…

企业网站制作需要多少钱网页翻译功能在哪

配置文件目录 linux 系统中有很多配置文件目录/etc/systemd/system、/lib/systemd/system 以及/usr/lib/systemd/system 等&#xff0c;这三者有什么样的关系呢&#xff1f; 以下是网络上找的资料汇总&#xff0c;并加了一些操作验证。方便后期使用 介绍 目录/lib/systemd/s…

文件提供的基本操作

创建文件(create) 1.所需外存空间大小 2.文件存放路径 3.文件名 操作系统在接受大create之后 1.在外存中找到文件所需空间(上小结内容) 2.根据文件存放路径信息找到目录对应的目录文件,在目录文件创建文件对应的目…

上海建设小学网站电脑从做系统怎么找回以前登录的网站

数据结构之图 图的定义和概念图的定义图的术语 图的类型定义图的存储结构数组&#xff08;邻接矩阵&#xff09;表示法无向图的邻接矩阵表示法有向图的邻接矩阵表示法网&#xff08;即有权图&#xff09;的邻接矩阵表示法 邻接矩阵的ADT定义邻接表&#xff08;链式&#xff09;…

网站制作步骤深圳营销推广公司

什么是IOC&#xff1f; 控制反转&#xff0c;依赖注入 1、控制什么&#xff1f; 控制对象的创建及销毁(生命周期) 2、反转什么&#xff1f; 讲对象的控制权交给IOC容器

无锡知名网站制作广州个人网站制作公司

引言&#xff1a;从本文开始&#xff0c;我们详细介绍Xilinx CIC IP核滤波器相关知识&#xff0c;包括CIC IP核提供的特性、IP核接口描述以及IP核设计指导等相关内容。1.概述级联积分器梳状(CIC)滤波器&#xff0c;也称为Hogenauer滤波器&#xff0c;是用于实现数字系统中大采样…

深入解析:MySQL(50)如何使用UNSIGNED属性?

深入解析:MySQL(50)如何使用UNSIGNED属性?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…