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

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

问题描述为给定一个节点总数为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) 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fastadmin答题考试系统开源二次开发带拍照搜题版本

应用介绍 应用介绍 一款基于FastAdminThinkPHPUniapp开发的小程序答题考试系统&#xff0c;提供全部前后台无加密源代码&#xff0c;支持私有化部署 前端截图&#xff1a; 后台截图&#xff1a; 功能介绍&#xff1a;

LeetCode 每日一题 Day 37-43

终于考完试了&#xff0c;寒假期间将会每天持续更新&#xff01; 447. 回旋镖的数量(Day 37) 给定平面上 n 对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧…

颜色对话框 QColorDialog

1. 颜色对话框 QColorDialog 1.1 基本函数 QColor getColor(const QColor &initial Qt::white, QWidget *parent nullptr, const QString &title QString(), QColorDialog::ColorDialogOptions options ColorDialogOptions())返回值&#xff1a;QColor&#xff0c;…

SpringBoot+SSM项目实战 苍穹外卖(11) Apache ECharts

继续上一节的内容&#xff0c;本节学习Apache ECharts&#xff0c;实现营业额统计、用户统计、订单统计和销量排名Top10功能。 数据统计效果图&#xff1a; 目录 Apache ECharts入门案例 营业额统计用户统计订单统计销量排名Top10 Apache ECharts Apache ECharts 是一款基于 …

使用 Clojure 进行 OpenCV 开发简介

从 OpenCV 2.4.4 开始&#xff0c;OpenCV 支持使用与 Android 开发几乎相同的接口进行桌面 Java 开发。 Clojure 是由 Java 虚拟机托管的一种现代 LISP 方言&#xff0c;它提供了与底层 JVM 的完全互操作性。这意味着我们甚至应该能够使用 Clojure REPL&#xff08;Read Eval …

代码随想录 Leetcode1. 两数之和

题目&#xff1a; 代码&#xff08;首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int another 0;unordered_map<int,int> hash;for(int i 0; i < nums.size();…

arcgis javascript api4.x以basetilelayer方式加载天地图web墨卡托(wkid:3857)坐标系

需求&#xff1a; arcgis javascript api4.x以basetilelayer方式加载天地图web墨卡托&#xff08;wkid&#xff1a;3857&#xff09;坐标系 效果图&#xff1a; 代码&#xff1a; 提示&#xff1a; 2个文件放同一个文件夹下 MyCustomTileLayer.js define([exports, "…

Grind75第10天 | 133.克隆图、994.腐烂的橘子、79.单词搜索

133.克隆图 题目链接&#xff1a;https://leetcode.com/problems/clone-graph 解法&#xff1a; 这个题是对无向图的遍历&#xff0c;可以用深度优先搜索和广度有限搜索。 下面这个图比较清楚的说明了两种方法的区别。 DFS&#xff1a;从A开始克隆&#xff0c;遍历两个邻居…

IntelliJ IDEA - 快速去除 mapper.xml 告警线和背景(三步走)

1、去掉 No data sources configure 警告 Settings&#xff08;Ctrl Alt S&#xff09; ⇒ Editor ⇒ Inspections ⇒ SQL ⇒ No data sources configure 2、去掉 SQL dialect is not configured 警告 Settings&#xff08;Ctrl Alt S&#xff09; ⇒ Editor ⇒ Inspecti…

C语言经典算法之冒泡排序算法

目录 前言 建议&#xff1a; 简介&#xff1a; 一、代码实现 二、时空复杂度 时间复杂度&#xff1a; 空间复杂度&#xff1a; 总结&#xff1a; 前言 建议&#xff1a; 1.学习算法最重要的是理解算法的每一步&#xff0c;而不是记住算法。 2.建议读者学习算法的时候…

决策树(公式推导+举例应用)

文章目录 引言决策树学习基本思路划分选择信息熵信息增益增益率&#xff08;C4.5&#xff09;基尼指数&#xff08;CART&#xff09; 剪枝处理预剪枝&#xff08;逐步构建决策树&#xff09;后剪枝&#xff08;先构建决策树再剪枝&#xff09; 连续值与缺失值处理连续值处理缺失…

rsync远程同步服务

一、rsync&#xff08;远程同步&#xff09; rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09; 是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;支持增量备份&#xff0c;并保持链接和权限&#xff0c;且采用优化的同步…

初识物联网

1&#xff1a;什么是IOT&#xff1a; 物联网的英文名称是Internet of Things。IoT则是Internet of Things的缩写。因此, 物联网 IoT。 通俗地说&#xff0c;物联网是互联网的一种拓展。我们知道互联网是由无数的计算机和智能手机交错连接而编织成的一张网。而正是有了像NodeM…

大模型LLM Agent在 Text2SQL 应用上的实践

1.前言 在上篇文章中「如何通过Prompt优化Text2SQL的效果」介绍了基于Prompt Engineering来优化Text2SQL效果的实践&#xff0c;除此之外我们还可以使用Agent来优化大模型应用的效果。 本文将从以下4个方面探讨通过AI Agent来优化LLM的Text2SQL转换效果。 1 Agent概述2 Lang…

基于Python编程实现简单网络爬虫实现

引言 网络爬虫&#xff08;英语&#xff1a;web crawler&#xff09;&#xff0c;也叫网络蜘蛛&#xff08;spider&#xff09;&#xff0c;是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。 --维基百科 网络爬虫可以将自己所访问的页面保存下来&#xff0c…

ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 新年伊始&#xff0c;我们想在这里感谢一群 ByConity 社区的小伙伴们。 正是因为有社区的开发者的支持&#xff0c;截止到 2023 年底&#xff0c;ByConity GitHub …

电脑的任务栏怎么恢复到底下?简单的4个方法帮你解决!

“我在使用电脑的时候突然发现电脑底部的任务栏不见了&#xff0c;有什么方法可以将任务栏恢复到底下吗&#xff1f;快给我出出主意吧&#xff01;” 在使用电脑时&#xff0c;我们可能会发现电脑的任务栏跑到屏幕顶部或消失的情况。这不仅影响了我们的使用体验&#xff0c;还可…

SMD NTC Thermistor NTC热敏电阻产品基本参数定义

热敏电阻器&#xff08;Thermistor&#xff09;是一种电阻值对温度极为灵敏的半导体元件&#xff0c;温度系数可分为Positive Temperature Coefficient 正温度系数热敏电阻又称PTC热敏电阻和Negative Temperature Coefficient 负温度系数热敏电阻又称NTC热敏电阻. NTC热敏电…

20240115-【UNITY 学习】第一人称移动增加斜坡移动、冲刺和蹲伏功能

直接修改或者替换PlayerMovement_01.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerMovement_02 : MonoBehaviour {private float moveSpeed; // 玩家移动速度public float walkSpeed 7; // 行走速度public float sp…

运筹说 第91期 | 网络计划经典例题讲解

通过前几期的学习&#xff0c;我们已经学会了网络图的基本概念、时间参数的计算&#xff0c;并且掌握了随机网络的概念、图解评审法的基本原理和基本解法&#xff0c;本期小编带大家学习网络计划在经济管理中的应用。 在实际工作中&#xff0c;我们能发现网络计划在经济管理中…