单源最短路径(java版)

📑前言

本文主要是【单源最短路径】——单源最短路径使用的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见

目录

    • 📑前言
    • 单源最短路径
    • Dijkstra单源最短路径
    • Floyd单源最短路径
    • 打印结果
    • 📑文章末尾

单源最短路径

  • 以如下图为例

Dijkstra单源最短路径

package 图论;import java.util.Arrays;
import java.util.Scanner;public class Dijkstra {
/*
6 9
0 1 1
0 2 12
1 2 9
1 3 3
2 4 5
3 2 4
3 4 13
3 5 15
4 5 4*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int vn=sc.nextInt();//顶点int en=sc.nextInt();//边int g[][]=new int[vn][vn];int dis[]=new int[vn];int vis[]=new int[vn];for(int i=0;i<vn;i++) {for(int j=0;j<vn;j++) {if(i==j) g[i][j]=0;else g[i][j]=999;}}for(int i=0;i<en;i++) g[sc.nextInt()][sc.nextInt()]=sc.nextInt();for(int i=0;i<vn;i++) {dis[i]=g[0][i];//初始化数组}vis[0]=1;//标记已经使用过了,松弛过了int mindex=0;//记录当前从v0到哪一个点的距离最小(未松弛过的点)for(int i=0;i<vn-1;i++) {int min=999;for(int j=0;j<vn;j++) {//dis数组里找最小的,未松弛过的点if (vis[j]==0 && dis[j]<min) {min=dis[j];//记录最小的距离mindex=j;//记录最小的顶点编号}}vis[mindex]=1;//通过这个点去松弛for(int j=0;j<vn;j++) {if(g[mindex][j]<999 && mindex!=j)dis[j]=Math.min(dis[j], dis[mindex]+g[mindex][j]);}}System.out.println(Arrays.toString(dis));}}

Floyd单源最短路径

package 图论;import java.util.Arrays;
import java.util.Scanner;public class Floyd {
/*
4 8
0 1 2
1 2 3
0 2 6
2 0 7
0 3 4
3 0 5
2 3 1
3 2 12*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();int[][] g=new int[n][n];for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {if(i==j) g[i][j]=0;else g[i][j]=999;}}for(int i=0;i<m;i++) {g[sc.nextInt()][sc.nextInt()]=sc.nextInt();}//弗洛伊德算法for(int k=0;k<n;k++) {for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {if(g[i][k]<999 && g[k][j]<999 && i!=j && i!=k && j!=k) {g[i][j]=Math.min(g[i][j], g[i][k]+g[k][j]);}}}}for(int[] x:g) {System.out.println(Arrays.toString(x));}}}

打印结果

[0, 1, 8, 4, 13, 17]

📑文章末尾

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/422430.html

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

相关文章

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO&#xff1a;3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码&#xff1a;加强小目标检测总结 提出背景 论文链接&#xff1a;https://arxiv.org/abs/2312.07729 代码链接&#xff1a;https://github.com/JDSobek/MedYOLO 提出背景&…

2024如何入局云计算?亚麻云助力您成为云专家!一次不过,免费再考

福利派送 2024年伊始&#xff0c;一波又一波的裁员潮又开始啦&#xff01;还在做传统行业&#xff1f;还在做传统程序员&#xff1f;亦或是对未来依旧迷茫&#xff1f;赶紧趁着行业东风&#xff0c;开始了解入门云计算吧&#xff01;亚马逊云科技&#xff0c;认证福利免费送&a…

SRC实战 | 某系统后台登录绕过到getshell

本文由掌控安全学院 - 17828147368投稿 开局一个登录框&#xff0c;漏洞全靠运气&#xff0c;先测试一下弱口令无果&#xff0c;再来个万能密码绕过登录试试 直接进去了&#xff0c;主要这个系统给人感觉就老 一般只要进入后台&#xff0c;功能点就多起来了&#xff0c;权限也…

PXE高效批量网络装机及kickstart无人值守安装

通过网卡启动 将准备的好的 4大文件 下载本地内存 &#xff0c;然后利用kikstart 应答文件 完成一键装机 单机&#xff1a; 光驱加载 linux 镜像去安装操作系统&#xff0c;光驱里有一个小型的linux操作系统 将操作系统 安装进自己的硬盘 PE 操作系统是外来的 设备的上操作系…

JavaEE 文件操作IO

文件操作&IO 文章目录 文件操作&IO1. 认识文件2. 文件操作2.1 File 类2.2 文件读写2.2.1 FileInputStream2.2.2 FileOutputStream2.2.3 FileReader2.2.4 FileWriter2.2.5 Scanner读取文件 3. 案例练习3.1 案例一3.2 案例二3.3 案例三 在进行文件操作之前&#xff0c;我…

Atlas元数据处理框架:让你的大数据应用更高效、更稳定!

介绍&#xff1a;Apache Atlas是一套开源的元数据管理和治理产品&#xff0c;由Apache软件基金会托管。它广泛应用于大数据领域&#xff0c;帮助企业管理数据资产&#xff0c;分类和治理这些资产&#xff0c;并为数据分析和数据治理提供高质量的元数据信息。 随着企业业务量的增…

0基础转行做软件测试?一文教小白拿到初级岗位offer?

我认为入门软件测试需要四个方面的知识or技能&#xff0c;它们是&#xff1a;业务知识、职业素养、基础知识、技术知识。 职业素养是一切的根基&#xff0c;因为人在职场就必须拥有必要的职业素养&#xff0c;软件测试工程师也不例外。基础知识和技术知识是两大支柱&#xff0…

【Electron】Electron是什么

1. Electron是什么 Electron是使用JavaScript、HTML和CSS构建跨平台&#xff08;Windows、MacOs、Linux&#xff09;的桌面应用。Electron其实就是一个可以展示网页内容的壳子&#xff0c;相当于一个独立的浏览器&#xff0c;可以提供给你一些接口&#xff0c;去调用系统的资源…

git本地分支的合并/切换分支时遇到的问题

目录 第一章、本地分支的切换测试1.1&#xff09;切换之前的master分支下文件内容1.2&#xff09;切换到develop分支后修改文件1.3&#xff09;切回master分支出现报错&#xff1a; 第二章、解决方式2.1&#xff09;方式1&#xff1a;commit提交修改2.2&#xff09;方式2&#…

深度学习(2)--卷积神经网络(CNN)

目录 一.卷积神经网络基础概念 二.输入层 三.卷积层 四.池化层 五.整体网络架构 六.感受野 一.卷积神经网络基础概念 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;是一种深度学习模型或类似于人工神经网络的多层感知器&#xff0c;常用来分析视…

SpringBoot - SpringBoot手写模拟SpringBoot启动过程

依赖 建一个工程&#xff0c;两个Module: 1. springboot模块&#xff0c;表示springboot框架的源码实现 2. user包&#xff0c;表示用户业务系统&#xff0c;用来写业务代码来测试我们所模拟出来的SpringBoot 首先&#xff0c;SpringBoot是基于的Spring&#xff0c;所以我…

13.XXL-JOB应用

XXL-JOB应用 1.介绍 XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台 2.XXL-JOB与Quartz的关系 老版本依赖Quartz的定时任务触发&#xff0c;在V2.1.0版本开始移除了Quartz 3.官方地址 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/gitee&#xf…