python解决求最短路径、最短时间问题

news2024/11/19 17:51:20

对于一个求最短路径的经常遇到的问题,对于从某一个节点到其余全部节点所需要的最短时间的问题,可以使用广度优先搜索算法的思路来进行解决,这是一个广度优先搜索算法在二维空间的应用。

问题描述为给定一个节点总数为N和一个列表list,对于这个列表中的某一个元素,list[i]=[node1,node2,time],这个列表元素表示的是从节点node1到节点node2所需要花费的时间长度是time值,而如果以一个节点K为起点,就对到达所有节点的时间至少需要多少时间求值。这里需要注意的就是list[i]这里面的边是单向的,就是从node1到node2之间的时间长度。

添加图片注释,不超过 140 字(可选)

如上图给定一个link,给定两个节点,输出的时间值是2

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

而如上的另外一个link以及两个值,输出的值是-1

添加图片注释,不超过 140 字(可选)

对于这个问题,如果说想要知道从节点K到所有节点至少需要花费多少时间,就需要求出节点K到每个节点的时间长度,然后从其中找出最大的值即可,这个问题就可以转化成一个求节点K到每个节点所需最短时间问题。如果使用一个列表来存储节点K到每个节点的最短时间长度,那通过判断某一节点作为中间节点能否使节点K到另外一个节点Q的时间长缩短来更新这个列表,并且由于K到Q最短时间长的更新可能导致整体的变化,所以就将节点Q进入队列中,并将其作为中间节点之后再更新定义的列表。

在实现过程中,主要是通过不断地以个节点为中间节点缩小节点K到其他各个节点的时间长度,若节点K到某一个节点时间长度减小,则就以该节点为中间节点更新节点K到其余各个节点的时间长度,在整个循环迭代中直到更新到最优。

使用python的代码实现如下:

from collections import deque
def ShortestPath(link,N,K):
    graph=[[float('inf') for _ in range(N)]for _ in range(N)]
    for d in link:
        x=d[0]-1
        y=d[1]-1
        graph[x][y]=d[2]
    for i in range(N):
        graph[i][i]=0 
    K2other=[float('inf') for _ in range(N)]
    K2other[K-1]=0
    queue=deque([K-1])
    while queue:
        current=queue.popleft()
        for i in range(N):
            if K2other[current]+graph[current][i]<K2other[i]:
                K2other[i]=K2other[current]+graph[current][i]
                queue.append(i)
    if float('inf') in K2other:
        return -1
    return max(K2other) 

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

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

相关文章

代码随想录 Leetcode454. 四数相加 II

题目&#xff1a; 代码 (首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {int n nums1.size();u…

浙江宁波象山县福利院部署清雷科技数字医养解决方案

“通过前台触屏电脑一体机&#xff0c;可以实时查看每位长者的生命体征情况&#xff0c;包括呼吸、心率、在离床状态、睡眠质量报告等&#xff0c;对呼吸异常、跌倒风险异常的长者还会特别标注提醒&#xff0c;不仅提高了照护人员的工作效率&#xff0c;还提升了对长者的安全保…

2719. 统计整数数目

给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&#xff…

C语言关于指针函数可变参数的使用方法和打印相应数据

通过使用四个函数来实现 指针函数的可变参数操作&#xff1b; 四个函数分别为&#xff1a; #include <stdarg.h>va_list ap; //初始化 参数列表指针 va_start(ap, count); //将ap指针指向第一个参数COUNT 这个是必须存在的 否则无法定位到后面的参数 va_arg(a…

arrow,一个神奇的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个神奇的 Python 库 - arrow。 Github地址&#xff1a;https://github.com/arrow-py/arrow 日期和时间处理是许多应用程序中的常见任务&#xff0c;但在 Python 中&#xf…

[Python进阶] Python操作MySQL数据库:pymysql

7.7 操作MySQL数据库&#xff1a;pymysql 7.7.1 准备工作(创建mysql数据库) PHPStudy介绍&#xff1a; phpstudy是一款非常有用的PHP开发工具&#xff0c;旨在帮助开发者更加便捷地进行PHP程序的开发与调试。它提供了一个友好的图形用户界面&#xff0c;使得用户能够方便地进…

Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏)

目录 1. 前言2. 参数3. 功能3.1 按钮&#xff1a;Button、RepeatButton3.2 文本&#xff1a;Label、TextArea、TextField、PasswordField3.3 工具栏&#xff1a;Toolbar3.4 切换框&#xff1a;Toggle3.5 滚动条&#xff1a;HorizontalScroll 、VerticalScroll3.6 滑条&#xff…

5G工业路由器专业版(视频监控专用5G路由器)

​大家好,今天给大家推荐一款强大的5G工业级路由器——SR510 5G工业级路由器系列产品。这款路由器集4G/5G网络、虚拟专网等多种技术于一体,提供稳定的工业级网络解决方案,非常适合部署在需要高速传输、低延时的视频监控场景中。 x更多详情&#xff1a;&#xff08;key-iot.com…

pytorch12:GPU加速模型训练

目录 1、CPU与GPU2、数据迁移至GPU2.1 to函数使用方法 3、torch.cuda常用方法4、多GPU并行运算4.1 torch.nn.DataParallel4.2 torch.distributed加速并行训练 5、gpu总结 往期回顾 pytorch01&#xff1a;概念、张量操作、线性回归与逻辑回归 pytorch02&#xff1a;数据读取Data…

.NET 反射的介绍和简单应用

什么是反射&#xff1f; 反射就是动态发现类型信息的能力。它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型&#xff0c;这些信息在设计时是未知的&#xff0c;这种能力类似于后期绑定。反射还支持的更高级的行为&#xff0c;能在运行时动态创建新类型&#xff0…

云原生微服务之分布式锁框架 Redisson

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

倒F天线设计经验分享

一、IFA天线理论分析 为了改善&#xff29;&#xff2c;&#xff21;天线难以使用的缺点&#xff0c;在&#xff29;&#xff2c;&#xff21;天线的基础上再增加一个倒L结构&#xff0c;形成IFA天线&#xff0c;此种天线体积小、易于匹配并具有双极化的特点&#xff0c;而在蓝…

「JavaSE」类和对象2

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 类和对象2 &#x1f349;匿名对象&#x1f349;关键字static&#x1f34c;static修饰成员变量&#x1f34c;static修饰成员方法&…

springboot项目创建及采用本地tomcat打包发布

springboot项目发布 maven使用 解压maven安装包 修改配置文件settings.xml 更改镜像(使用maven添加依赖时&#xff0c;选择下载的地址&#xff0c;百度云已提供) <mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyu…

天津Java开发培训哪家好?选Java培训班要考虑

在当今社会&#xff0c;Java语言在软件开发领域具有举足轻重的地位&#xff0c;Java是一门面向对象编程语言&#xff0c;Java语言集合了C的优点&#xff0c;丢弃了缺点&#xff0c;所以Java语言表现的功能强大而简单易用&#xff0c;已经得到越来越多的应届毕业生和职场新人的认…

Vue Axios——前端技术栈

文章目录 基本介绍Vue是什么&#xff1f; MVVMVue的使用快速入门注意事项和使用细节 Vue 数据绑定机制分析数据单向渲染注意事项和细节 双向数据绑定事件绑定示例&#xff1a;注意事项和使用细节课后作业1课后作业2 修饰符示例 条件渲染/控制: v-if v-showv-if VS v-show课后作…

ART-Adversarial Robustness Toolbox检测AI模型及对抗攻击的工具

一、工具简介 Adversarial Robustness Toolbox 是 IBM 研究团队开源的用于检测模型及对抗攻击的工具箱&#xff0c;为开发人员加强 AI模型被误导的防御性&#xff0c;让 AI 系统变得更加安全&#xff0c;ART支持所有流行的机器学习框架 &#xff08;TensorFlow&#xff0c;Ker…

外贸建站是什么意思?海洋建站需要多少钱?

外贸建站与独立站的区别&#xff1f;新人如何玩转外贸自建站&#xff1f; 在当今数字化时代&#xff0c;随着全球市场的不断融合&#xff0c;外贸建站成为了许多企业扩大业务的关键一环。那么&#xff0c;究竟什么是外贸建站&#xff1f;海洋建站将深入探讨这个问题&#xff0…

AIGC ChatGPT 4 Prompt 万能提示词公式

最近大家都在使用ChatGPT来帮助自己完成相应的工作。很多时候大家提出的问题得不到很清晰,很明确的答案。 我们应该怎么样来和ChatGPT进行有效的沟通呢? 例如我们先来问一问ChatGPT: 要获得最准确的回复,请确保遵循以下建议: 明确性:请尽量明确描述您的问题。确保提供足…

leetcode 17 电话号码字母组合

题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#xf…