最短路-Floyd Dijkstrea

news2024/11/25 6:42:05

Floyd算法

一种求解“多源最短路”问题的算法

在Floyd算法中,图一般用邻接矩阵存储,边权可正可负(但不允许负环),利用动态规划的思想,逐步求解出任意两点之间的最短距离

int d[N][N],初始为无穷

d[i][j]表示考虑到当前情况下,点i到点j的最短距离

Floyd算法

//注意K作为中转点,必须放最外层

for(in k=1;k<=n;++k)
    for(int i=1;i<=n;++i)
        for(int j=1j<=n;++j)
            if(dep[i][k]!=Long.MAX_VALUE&&dep[k][j]!=Long.MAX_VALUE)
                dep[i][j]=Math.min(dep[i][j],dep[i][k]+dep[k][j]);

只能用来处理n<=500的问题(这也是一个提示,当遇到n<=500的图论问题时,就可以考虑使用Floyd算法)

例题

已知公园有N个景点,景点和景点之间一共有M条道路,小明有Q个观景计划,每个计划包含一个起点st和ed,表示他想从st去到ed,但是小明体力有限,对于每个计划他想走最少的路完成,你可以帮他吗?

输入描述

输入第一行包含三个正整数N,M,Q

第2到M+1行包含三个正整数u,v,w,表示n<->v之间存在一条距离为w的路

第M+2到M+Q-1行每行包含两个正整数st,ed,其含义如题所述

1<=N<=400,1<=M<=N*(N-1)/2,Q<=10^3,1<=u,v,st,ed<=n,1<=w<=10^9

Dijkstra算法

算法需要准备的东西

long dep[N];//dep[i]表示点i距离源点的最短距离。优先队列q以距离从小到大排列

PriorityQueue<long []>q=new PriorityQueue<>((o1,o2)->Long.compare(o1[0],o2[0]));
q.add(new long[]{0L,1L});
while(!q.isEmpty()){

    long []a=q.poll();
    for(int []y:list[(int)a[1]]){
        if(a[0]+y[1]<dep[y[0]]){
            dep[y[0]]=a[0]+y[1];
            q.add(new long [] {dep[y[0]],y[0]});
        
        }
    }
}

例题

小明是蓝桥王国的王子,今天是他登基之日。
在即将成为国王之前,老国王给他出了道题,他想要考验小明是否有
能力管理国家。
题目的内容如下:
蓝桥王国一共有 N个建筑和 M条单向道路,每条道路都连接石两个
建筑,每个建筑都有自己编号,分别为 1~N(其中皇官的编号为1)
国王想让小明回答从皇官到每个建筑的最短路经是多少,但紧张的小
明此时已经无法思考,请你编写程序帮助小明回答国王的考核。

输入描述
输入第一行包含三个正整数 N,M
第2到 M+1行每行包三个正整数 u,v,m,表示u-->v之间存在一条距离为w 的路
1≤N≤3*10^5,1<=m <=10^6, 1< ui,ui<N, 0<=wi< 10^9

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

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

相关文章

生信数据分析——GO+KEGG富集分析

生信数据分析——GOKEGG富集分析 目录 生信数据分析——GOKEGG富集分析1. 富集分析基础知识2. GO富集分析&#xff08;Rstudio&#xff09;3. KEGG富集分析&#xff08;Rstudio&#xff09; 1. 富集分析基础知识 1.1 为什么要做功能富集分析&#xff1f; 转录组学数据得到的基…

设计模式6--抽象工厂模式

定义 案例一 案例二 优缺点

【2023】kafka入门学习与使用(kafka-2)

目录&#x1f4bb; 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型&#xff1a; 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

QT:如何在程序密集响应时,界面不会卡住?

前因&#xff1a; 当调用QApplication::exec()时&#xff0c;就启动了QT的事件循环。在开始的时候QT会发出一些事件命令来显示和绘制窗口部件。 在这之后&#xff0c;事件循环就开始运行&#xff0c;它不断检查是否有事件发生并且把这些事件发生给应用程序的QObject。 当处理…

HarmonyOS 应用开发之FA模型绑定Stage模型ServiceExtensionAbility

本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件。 PageAbility关联访问ServiceExtensionAbility PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceAbility的方式完全相同。 import featureAbility from ohos.ability…

Git 核心知识

2024年3月30日 Git 安装 官网下载&#xff0c;Git 选择合适的版本&#xff0c;无脑下一步即可。 安装成功之后&#xff0c;鼠标右键任意的文件夹&#xff0c;会出现 Git GUI 的选项&#xff0c;即安装成功 安装注意事项 安装前&#xff0c;检查环境变量 &#xff0c; 如果…

自定义SpringSecurity异常格式

今天发现spring的异常格式没有跟着mvc的错误格式走&#xff0c;场景是用户权限的时候。查了一下原来是springsecurity定义了一组filter作用在了mvc上层&#xff0c;因此需要处理一下错误格式。 处理前错误返回信息如下&#xff1a; 由于使用了多语言&#xff0c;因此错误格式也…

设计模式9--单例模式

定义 案例一 案例二 优缺点

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

4月1日起,未备案App小程序将下架

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 最后2天了、最后2天了。 从2024年4月1日起&#xff0c;工信部要求所有的APP、小程序都要备案&#xff0c;否则下架、关停、限制更新。这是去年8月份出的新规&#xff0c;没想到十个月这么快就过去了。 现在广东省…

JDK和IntelliJ IDEA下载和安装及环境配置教程

一、JDK下载&#xff08;点击下方官网链接&#xff09; Java Downloads | Oracle 选择对应自己电脑系统往下拉找到自己想要下载的JDK版本进行下载&#xff0c;我下的是jdk 11&#xff0c;JDK有安装版和解压版&#xff0c;我就直接下安装版的了。 .exe和.zip的区别&#xff1a…

链表(下)

0.上篇引入&#xff1a; 顺序表存在一些问题 1.顺序在插入的数据的时候数据需要进行移动势必会降低效率 2. 扩容存在性能的消耗 3.扩容会存在内存的浪费 所以引入了链表这种更好用的数据存储&#xff08;由独立的节点组成&#xff09; 1. 头删 2.查找 3.1指定位置之前插入…

sqli第24关二次注入

注入点 # Validating the user input........$username $_SESSION["username"];$curr_pass mysql_real_escape_string($_POST[current_password]);$pass mysql_real_escape_string($_POST[password]);$re_pass mysql_real_escape_string($_POST[re_password]);if($p…

Adaboost集成学习 | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测) 单变量时间序列单步预测。 ELM(Extreme Learning Machine,极限学习机)和AdaBoost(Adaptive Boosting,自适应提升)都是机…

文件和文件操作(C语言)

1.什么是文件&#xff1f; 磁盘或者是说硬盘上的文件就是文件。在程序设计中&#xff0c;我们⼀般谈的文件有两种&#xff1a;程序文件、数据文件。 2.文件名 ⼀个文件要有⼀个唯⼀的文件标识&#xff0c;以便识别和引用。 例如&#xff1a; c:\ files\ test.txt 3. ⼆进制…

搜索与图论——Kruskal算法求最小生成树

kruskal算法相比prim算法思路简单&#xff0c;不用处理边界问题&#xff0c;不用堆优化&#xff0c;所以一般稀疏图都用Kruskal。 Kruskal算法时间复杂度O(mlogm) 每条边存结构体里&#xff0c;排序需要在结构体里重载小于号 判断a&#xff0c;b点是否连通以及将点假如集合中…

【教程】最新可用! Python实现QQ扫码登录的群验证

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 背景说明 使用效果 参考代码 扫码登录(备份) 背景说明 Q群验证就是为了验证某个用户是否加入了指定的群聊。这可以有很多作用,比如限制软件的使用人群,以防滥用。 使用效果 参考代码 from PyQt5.QtCore import …

PinkysPalaceV2靶场详解IDA逆向查看缓存区溢出漏洞原理以及使用kali gdb使用超详细三次提权字典生成

下载链接: Pinkys Palace: v2 ~ VulnHub 安装&#xff1a; 正常用vm虚拟机打开即可&#xff0c;注意导入时所选择的硬盘存储目录应为空目录&#xff0c;否则会导入失败 根据下载链接提示我们需要更改host文件&#xff0c;以便于我们可以正常访问 kali中的host文件位置为 /etc/h…

Linux中常用命令(文件、目录和文件压缩)及功能示例

一、Linux关于文件与目录的常用命令及其功能示例 命令: ls 全名: List (列表) 常用选项: -l: 详细列表格式&#xff0c;显示详细信息。-a: 显示所有文件&#xff0c;包括隐藏文件。 功能: 列出目录内容。 示例: ls -la /home 此命令以详细格式列出/home目录中的所有文件&#x…

css3之2D转换transform

2D转换transform 一.移动&#xff08;translate)(中间用&#xff0c;隔开&#xff09;二.旋转&#xff08;rotate)&#xff08;有单位deg)1.概念2.注意点3.转换中心点&#xff08;transform-origin)&#xff08;中间用空格&#xff09;4.一些例子(css三角和旋转&#xff09; 三…