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

dijkstral算法详解

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;public class test39 {// 定义节点类,表示图中的顶点public static class Node {public int value; // 节点的值,即编号public int in; // 进入该节点的边的数量public int out; // 从该节点出去的边的数量public ArrayList<Node> nexts; // 直接邻居,由当前节点出发能到达的节点列表public ArrayList<Edge> edges; // 与该节点相关的边的集合public Node(int value) {this.value = value;in = 0;out = 0;nexts = new ArrayList<>();edges = new ArrayList<>();}}// 定义边类,表示图中的边public static class Edge {public int weight; // 边的权重public Node from; // 边的起始节点public Node to; // 边的终止节点public Edge(int weight, Node from, Node to) {this.weight = weight;this.from = from;this.to = to;}}// 定义图类,包含节点和边的集合public static class Graph {public HashMap<Integer, Node> nodes; // 存储图中所有节点的映射,键为节点编号,值为节点对象public HashSet<Edge> edges; // 存储图中所有边的集合public Graph() {nodes = new HashMap<>();edges = new HashSet<>();}}// 根据二维数组创建图结构的方法public static Graph createGraph(Integer[][] matrix) {Graph graph = new Graph();for (int i = 0; i < matrix.length; i++) {// 获取权重、起始点和终止点的值Integer weight = matrix[i][0];Integer from = matrix[i][1];Integer to = matrix[i][2];// 如果图中没有起始点,则新建一个节点并添加到图中if (!graph.nodes.containsKey(from)) {graph.nodes.put(from, new Node(from));}// 如果图中没有终止点,则新建一个节点并添加到图中if (!graph.nodes.containsKey(to)) {graph.nodes.put(to, new Node(to));}// 获取起始点和终止点的节点对象Node fromNode = graph.nodes.get(from);Node toNode = graph.nodes.get(to);// 创建一条新的边并将其添加到图中Edge newEdge = new Edge(weight, fromNode, toNode);// 更新起始点和终止点的邻居列表和边的数量fromNode.nexts.add(toNode);fromNode.out++;toNode.in++;fromNode.edges.add(newEdge);graph.edges.add(newEdge);}return graph;}// Dijkstra算法实现,计算从指定起点到其他所有点的最短路径长度public static HashMap<Node, Integer> dijkstral(Node from) {HashMap<Node, Integer> distanceMap = new HashMap<>(); // 存储每个节点到起点的距离distanceMap.put(from, 0); // 起点到自己的距离为0HashSet<Node> selectNodes = new HashSet<>(); // 存储已经处理过的节点Node minNode = getMinDistanceAndUnselectedNode(distanceMap, selectNodes); // 获取未处理的节点中距离最小的节点while (minNode != null) { // 当还有未处理的节点时继续循环int distance = distanceMap.get(minNode); // 获取当前节点到起点的距离for (Edge edge : minNode.edges) { // 遍历当前节点的所有邻居节点Node toNode = edge.to; // 获取邻居节点if (!distanceMap.containsKey(toNode)) { // 如果邻居节点还未处理过,则添加其到距离映射表中distanceMap.put(toNode, distance + edge.weight);} else { // 如果邻居节点已处理过,则更新其到起点的距离(如果新的距离更短)distanceMap.put(edge.to, Math.min(distanceMap.get(toNode), distance + edge.weight));}}selectNodes.add(minNode); // 将当前节点标记为已处理minNode = getMinDistanceAndUnselectedNode(distanceMap, selectNodes); // 获取下一个未处理的节点中距离最小的节点}return distanceMap; // 返回所有节点到起点的最短距离映射表}// 辅助方法:获取未处理的节点中距离最小的节点public static Node getMinDistanceAndUnselectedNode(HashMap<Node, Integer> distanceMap, HashSet<Node> touchedNodes) {Node minNode = null; // 初始化最小距离节点为nullint minDistance = Integer.MAX_VALUE; // 初始化最小距离为最大整数值for (Map.Entry<Node, Integer> entry : distanceMap.entrySet()) { // 遍历距离映射表Node node = entry.getKey(); // 获取节点int distance = entry.getValue(); // 获取节点到起点的距离if (!touchedNodes.contains(node) && distance < minDistance) { // 如果节点未处理且距离小于当前最小距离minNode = node; // 更新最小距离节点minDistance = distance; // 更新最小距离}}return minNode; // 返回最小距离节点}
}

相关文章:

dijkstral算法详解

import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map;public class test39 {// 定义节点类&#xff0c;表示图中的顶点public static class Node {public int value; // 节点的值&#xff0c;即编号public int in; // 进入…...

创意指南丨AR数学沉浸式空间体验

AR学习种类那么多&#xff0c;哪款最吸引你&#xff1f; 星河造梦坊和Unity联手打造的沉浸式空间AR无疑是其中的佼佼者。 这款应用不仅利用AR技术将抽象的数学概念变得生动有趣&#xff0c;还通过互动体验让学习者仿佛置身于一个充满奇幻色彩的数学世界中。 无论是学生还是教…...

linux文件——深度学习文件fd、文件系统调用

前言&#xff1a;从本片开始正式进入linux文件的学习&#xff0c;本片内容主要是文件的fd。 本篇内容博主将要先带友友回忆C语言中的文件操作接口&#xff0c;然后再过渡到操作系统中的系统调用的学习&#xff0c;最后理解操作系统中的文件操作。 ps&#xff1a;本节内容设计一…...

003集——C#数据类型 及大小端序转换——C#学习笔记

如需得到一个类型或一个变量在特定平台上的准确尺寸&#xff0c;可以使用 sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。下面举例获取任何机器上 int 类型的存储尺寸&#xff1a; using System;namespace DataTypeApplication {class Program{…...

结构化输出及其使用方法

在 LLM 应用程序中构建稳健性和确定性 图片来自作者 欢迎来到雲闪世界。OpenAI最近宣布其最新的gpt-4o-2024–08–06模型支持结构化输出。与大型语言模型 (LLM) 相关的结构化输出并不是什么新鲜事——开发人员要么使用各种快速工程技术&#xff0c;要么使用第三方工具。 在本文…...

yolov8人脸识别案例

GitHub - wangWEI201901/YOLOv8-Detection-Project: &#x1f6e3;️基于YOLOv8的智慧校园人脸识别和公路汽车检测...

成员变量在Java中的定义与使用

成员变量在Java中的定义与使用 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在本文中&#xff0c;我们将详细探讨Java中的成员变量&#xff0c;包括其定义、使用以及各种类型的成员变量示例。 成员…...

Python开发工具PyCharm入门指南 - 用户界面主题更改

JetBrains PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。 界面主题定义了窗口、对话框、按钮和用户界面的所有可视元素的外观…...

TCP网络套接字

一、创建套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); 参数&#xff1a; domain&#xff1a;指定使用的协议族。常见的取值有AF_INET&#xff08;IPv4&#xff09;和AF_INET6&#xff08;IPv6&a…...

Element学习(axios异步加载数据、案例操作)(5)

1、这次学习的是上次还未完成好的恶element案例&#xff0c;对列表数据的异步加载&#xff0c;并渲染展示。 ——>axios来发送异步请求 &#xff08;1&#xff09; &#xff08;2&#xff09;在vue当中安装axios &#xff08;注意在当前的项目目录&#xff0c;并且安装完之后…...

大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

html+css+js网页设计 软通动力网站2个页面(带js)首页轮播图+置顶导航

htmlcssjs网页设计 软通动力网站2个页面&#xff08;带js&#xff09;首页轮播图置顶导航 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及…...

【经验分享】ShardingSphere+Springboot-04:自定义分片算法(COMPLEX/STANDARD)

文章目录 3.4 CLASS_BASED 自定义类分片算法3.4.1 复杂分片自定义算法&#xff08;strategyCOMPLEX &#xff09;3.4.2 STANDARD 标准分片自定义算法## 进阶:star: 自定义算法范围查询优化 3.4 CLASS_BASED 自定义类分片算法 3.4.1 复杂分片自定义算法&#xff08;strategyCOM…...

如何设置RabbitMQ和Redis消息队列系统

设置RabbitMQ和Redis作为消息队列系统时&#xff0c;需要分别进行安装、配置和测试&#xff0c;以确保它们能够正常工作并满足你的应用需求。以下是一个基于这两个系统的设置指南&#xff1a; RabbitMQ的设置 1. 安装Erlang 由于RabbitMQ是用Erlang语言编写的&#xff0c;因…...

白骑士的Matlab教学高级篇 3.3 工具箱与扩展

MATLAB 提供了丰富的工具箱&#xff08;Toolbox&#xff09;和扩展功能&#xff0c;这些工具箱涵盖了各个领域的专业计算需求&#xff0c;如信号处理、图像处理、统计与机器学习等。利用工具箱&#xff0c;用户可以快速实现复杂的计算和分析任务。本文将介绍常用的工具箱及其使…...

bug: 配置flyway.locations多个脚本位置不生效

文章目录 业务场景场景一场景二 业务场景 随着项目版本迭代&#xff0c;数据库结构也会变动。如果一个项目引用其他项目的jar包&#xff0c;并且需要执行对应jar包的flyway脚本&#xff0c;就需要配置flyway.locations 场景一 正常情况下&#xff0c;在一个项目中可以在yml文件…...

8月5日SpringBoot学习笔记

今日内容:搭建mybatis ORM 配置数据源 $#的区别 增删改查 搭建mybatis 在原有maven项目基础配置上进行&#xff1a; pom文件添加依赖 <!-- Mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-…...

Java学习笔记(二十):反射、动态代理、日志、类加载器、xml、单元测试Junit、注解

目录 一、反射 1.1 反射的概述&#xff1a; 1.2 学习反射到底学什么&#xff1f; 1.3 获取字节码文件对象的三种方式 1.4 字节码文件和字节码文件对象 1.5 获取构造方法 1.6 获取构造方法并创建对象 1.7 获取成员变量 1.8 获取成员变量并获取值和修改值 1.9 获取成员…...

如何快速从文本中找到需要的信息,字典和正则灵活运用

import re #打开文本文件 f open("stock_data.txt",encoding"utf-8") #单独读取第一行数据处理进行分割&#xff0c;末尾换行符去掉 headers f.readline().strip().split(,) print(headers) #定义一个字典&#xff0c;以股标代码做为KEY,每个行做为值 st…...

springboot3整合redis

来源于https://www.bilibili.com/video/BV1UC41187PR/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source865f32e12aef524afb83863069b036aa 一、整合redis 1.创建项目文件 2.添加依赖 <dependencies><dependency><groupId>…...

Qwen3.5-9B镜像安全加固:非root用户运行+端口绑定限制+HTTPS代理配置

Qwen3.5-9B镜像安全加固&#xff1a;非root用户运行端口绑定限制HTTPS代理配置 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解&#xff08;图文输入&#xff09;和长上下文处理&a…...

电商智能客服:基于Qwen3-VL:30B的多模态问答系统实现

电商智能客服&#xff1a;基于Qwen3-VL:30B的多模态问答系统实现 1. 引言 电商客服每天面对海量咨询&#xff0c;从"这件衣服有没有M码"到"这个电器怎么安装"&#xff0c;问题五花八门。传统客服需要不停切换商品页面、说明书、物流信息&#xff0c;忙得…...

3MF格式与Blender插件实战解决方案:从设计障碍到3D打印全流程优化

3MF格式与Blender插件实战解决方案&#xff1a;从设计障碍到3D打印全流程优化 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 一、问题&#xff1a;当3D打印遭遇"数…...

收藏!大模型/后端校招面试,项目这么讲才不浪费优势(小白必看)

这段时间&#xff0c;我全程参与了多场校招后端开发、大模型应用开发岗位的面试复盘工作&#xff0c;越复盘越有一个深刻的感悟&#xff1a;绝大多数候选人&#xff0c;并不是自身项目质量不过关&#xff0c;而是讲述项目的方式彻底走偏&#xff0c;硬生生浪费了自己的核心优势…...

Qwen3-0.6B入门实战:从镜像启动到智能问答,完整流程解析

Qwen3-0.6B入门实战&#xff1a;从镜像启动到智能问答&#xff0c;完整流程解析 1. Qwen3-0.6B简介 Qwen3&#xff08;千问3&#xff09;是阿里巴巴集团开源的新一代通义千问大语言模型系列&#xff0c;涵盖6款密集模型和2款混合专家&#xff08;MoE&#xff09;架构模型。Qw…...

bert-base-chinese新手必看:完形填空与语义相似度功能实测教程

bert-base-chinese新手必看&#xff1a;完形填空与语义相似度功能实测教程 1. 快速了解bert-base-chinese bert-base-chinese是Google发布的经典中文预训练模型&#xff0c;作为NLP领域的基础模型&#xff0c;它已经成为中文自然语言处理任务的标准选择之一。这个模型特别适合…...

OpenClaw跨平台同步:Qwen3.5-9B维护多设备代码仓库

OpenClaw跨平台同步&#xff1a;Qwen3.5-9B维护多设备代码仓库 1. 多设备开发的痛点与解决方案 作为一名自由职业开发者&#xff0c;我经常需要在不同设备间切换工作——家里的台式机、咖啡馆的笔记本、客户现场的平板。最让我头疼的是代码版本管理&#xff1a;在A设备修改的…...

大学生论文降重技巧:用AI辅助,重复率轻松降到10%以下

2026年AI学术辅助工具已进入“精准合规改写、核心语义完整保留”的全新发展阶段&#xff0c;彻底解决了大学生论文降重“耗时长、改写生硬、易踩学术红线”的普遍难题。据中国高校图书馆协会2026年调研数据显示&#xff0c;超7成大学生在论文写作过程中会遇到重复率超标的问题&…...

Unity性能优化终极利器:MeshFusion Pro

在现代游戏开发中&#xff0c;性能优化始终是一个核心问题。尤其是在大型场景或高复杂度模型的项目中&#xff0c;Draw Call 过多、顶点数量庞大以及实时生成对象都会严重拖慢游戏帧率&#xff0c;影响用户体验。为了应对这些挑战&#xff0c;Unity 开发者社区中出现了大量优化…...

TSMaster安全算法实战:如何用DLL快速实现SeedKey解锁(附常见错误排查)

TSMaster安全算法实战&#xff1a;如何用DLL快速实现Seed&Key解锁&#xff08;附常见错误排查&#xff09; 在汽车电子诊断领域&#xff0c;安全访问机制&#xff08;Seed&Key&#xff09;如同车辆的电子钥匙&#xff0c;是保护ECU数据安全的重要屏障。作为深耕诊断协议…...