《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相

剧情背景

在《庆余年 2》22集中,林相跟大宝交代完为人处世的人生哲理之后,就要跟大宝告别了
在这里插入图片描述

在《庆余年 2》23集中,林相在告老还乡的路上与婉儿和大宝告别后在这里插入图片描述
范闲也在与婉儿的对话中知道黑骑调动是绝密,并把最近一次告老还乡梅执礼被马匪截杀与黑骑调动日期关联在一起,范闲知道了老皇帝要杀林相消息,所以范闲必须尽快找到一条最短路径在黑骑到之前去营救林相。这时候范闲在另外一个世界带来的记忆突然奔袭而来,马上想到用于地图导航GPS的Dijkstra算法,得找到路程最短的路径赶在黑骑到达前才能拯救林相,而在此之前他早就把庆国地形和路径都让人探究清楚了。知道黑骑所在位置到林相的位置大概需要75分钟。

现状输入描述

  • 起点A:范闲目前所在的位置。
  • 中点B:林相目前所在的位置。
  • 节点集:A和B之间的多个节点路口CDEGF(例如路上的交叉点、村庄等)。
  • 路程:连接这些节点的道路,每条道路有对应的行驶时间。

在这里插入图片描述

使用Dijkstra算法求解最短路径

实现原理

  1. Dijkstra 算法从指定的节点(源节点)出发,寻找它与图中所有其它节点之间的最短路径。
  2. Dijkstra 算法会记录当前已知的最短路径,并在寻找到更短的路径时更新。
  3. 一旦找到源节点与其他节点之间的最短路径,那个节点会被标记为“已访问”并添加到路径中。
  4. 重复寻找过程,直到图中所有节点都已经添加到路径中。这样,就可以得到从源节点出发访问所有其他节点的最短路径方案。

以下是详细的步骤和计算过程:

步骤 1: 初始化

  • 起点A到所有其他节点的初始距离设为无穷大,除了起点本身,其距离为0。
  • 使用优先队列初始化,从起点A开始。
距离:
A: 0
C: ∞
D: ∞
E: ∞
F: ∞
G: ∞
B: ∞

优先队列:
[(0, 'A')]

步骤 2: 处理节点A

  • 从A出发,可以到C和D,更新距离。
    在这里插入图片描述

步骤 3: 处理节点C

  • 从C出发,可以到E,更新距离。
    在这里插入图片描述

步骤 4: 处理节点D

  • 从D出发,可以到E,但已有更短路径 C -> E,不更新。
距离:
A: 0
C: 15
D: 20
E: 25
F: ∞
G: ∞
B: ∞

优先队列:
[(25, 'E')]

步骤 5: 处理节点E

  • 从E出发,可以到F和G,更新距离。
    在这里插入图片描述

步骤 6: 处理节点F

  • 从F出发,可以到B,更新距离。
距离:
A: 0
C: 15
D: 20
E: 25
F: 43
G: 45
B: 88

优先队列:
[(45, 'G'), (88, 'B')]

步骤 7: 处理节点G

  • 从G出发,可以到B,更新距离。
    在这里插入图片描述

结果

通过Dijkstra算法计算,范闲从A到B的最短路径是A -> C -> E -> G -> B,总时间为:

  • A -> C:15分钟
  • C -> E:10分钟
  • E -> G:20分钟
  • G -> B:25分钟
  • 总时间:15 + 10 + 20 + 25 = 70分钟 (黑骑到林相需要75分钟)
    这时候选择A -> C -> E -> G -> B 因为没有导航刚刚手动计算已经花了两分钟了,情况紧急叫来王启年,马上赶路
    王启年说范闲我们两个打不过黑骑,但是范闲说情况紧急没法给你找兵马,要去拼一把,跟打工人不给资源不给权利但是还要让你做出业绩一样、跟研究生不给钱不给署名还要写出论文一样
    在这里插入图片描述
    这里可以看出王启年作为一个优秀员工,肯定每年拿E,这表情比老板还急
    在这里插入图片描述

从这里可以看出来,王启年业务能力也是一流,跑的比骑马快
在这里插入图片描述
按预期时间总算到了,开始正面刚黑骑
在这里插入图片描述
王启年虽然辛苦,但是范闲作为老板还是能抗事,马上承担责任,确保拿到结果,取得业绩有超强的领导力,是一个好老板
在这里插入图片描述

参考代码

import heapq

def dijkstra(graph, start):
    queue = [(0, start)]
    distances = {node: float('inf') for node in graph}
    distances[start] = 0
    while queue:
        current_distance, current_node = heapq.heappop(queue)
        if current_distance > distances[current_node]:
            continue
        for neighbor, weight in graph[current_node].items():
            distance = current_distance + weight
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(queue, (distance, neighbor))
    return distances

# 图的邻接表表示
graph = {
    'A': {'C': 15, 'D': 20},
    'C': {'A': 15, 'E': 10},
    'D': {'A': 20, 'E': 15},
    'E': {'C': 10, 'D': 15, 'F': 18, 'G': 20},
    'F': {'E': 18, 'B': 45},
    'G': {'E': 20, 'B': 25},
    'B': {'F': 45, 'G': 25}
}

# 计算从起点A到各节点的最短路径
start = 'A'
distances = dijkstra(graph, start)
print(f"从{start}到各节点的最短路径: {distances}")

写到最后

希望文章能让大家放松的同时有知识进入到脑子里
这里作者祝大家:

  • 高考\期末考的同学们:笔尖跃动光辉梦,心中理想定成真
  • 毕业生们:才华扬帆乘风起,壮志凌云展未来
  • 正在工作:不畏艰难勇向前,努力奋斗创佳绩
  • 老板领导们:睿智领导拓新路,胸怀广阔业绩殊

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

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

相关文章

【服务器部署篇】Linux下Node.js的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

Kprobe实现原理

kprobe其实就是将某个要检测的指令备份&#xff0c;再替换成int3(x86)或者未定义指令(arm)来触发异常&#xff0c;再调用对应体系的异常处理函数来执行我们自定义的hook&#xff0c;执行完我们自定义的hook,再将备份的指令放回原来的位置继续往下执行 下面我们就来看下linux内核…

web题解 Easy_SQLi or 雏形系统 (解题方法思想)

1.Easy_SQLi 1&#xff09;打开题目环境&#xff0c;如下是一个类似弱密码的格式&#xff0c;但是它又说是sql&#xff0c;还是按sql注入来 2&#xff09;.这里我尝试判断它的注入类型&#xff0c;但是一只不对&#xff0c;我便想着用万能密码试试&#xff0c;怎料直接登录成功…

Tableau解包与版本兼容性

Tableau解包与版本兼容性 1、背景描述2、Tableau解包3、Tableau版本兼容性 1、背景描述 有时&#xff0c;在使用Tableau Desktop打开.twbx打包工作簿时&#xff0c;可能会出现如下弹框&#xff1a; 通常考虑以下两种处理情况 2、Tableau解包 解包打包的.twbx工作簿&#xff0c…

电脑显示由于找不到msvcr110.dll 无法继续执行如何处理?最简单的修复msvcr110.dll文件方法

电脑显示由于找不到msvcr110.dll 无法继续执行&#xff1f;当你看到这种提示的时候&#xff0c;请不要紧张&#xff0c;这种是属于dll文件丢失&#xff0c;解决起来还是比较简单的&#xff0c;下面会详细的列明多种找不到msvcr110.dll的解决方法。 一.找不到msvcr110.dll是怎么…

HAL库+LWIP+LAN8720+热插拔

定时任务中&#xff0c;查询LAN8720的状态寄存器 PHY_BSR 0x01&#xff0c;成功读取后&#xff0c;检查16位数据的BIT2&#xff0c;即可获取网线连接状态 uint32_t phyreg 0;if(HAL_ETH_ReadPHYRegister(&g_eth_handler, PHY_BSR, &phyreg) HAL_OK){if(((phyreg >…

【Python Cookbook】S01E01 将长度为N的序列分解为N个单独的变量

目录 问题解决方案讨论 问题 将一个包含 N N N 个元素的元组或者序列&#xff0c;现在想将其分解为 N N N 个单独的变量。 解决方案 任何序列都可以通过简单的赋值操作分解为单独的变量&#xff1a; p (4, 5) x, y p print("x", x) print("y", y)唯…

v4l2抓取rv1126图像

0.准备工作 本文是基于正点原子的rv1126开发板使用mx415摄像头对不同节点的图像进行抓取 1.数据流向 图1 mx415采集到的数据为原始的拜尔格式&#xff08;也就是raw格式&#xff09;&#xff0c;我们需要通过isp进行图像的调节才符合视觉&#xff0c;其中isp和ispp是两个处理的…

智能监控技术助力山林生态养鸡:打造智慧安全的养殖新模式

随着现代科技的不断发展&#xff0c;智能化、自动化的养殖方式逐渐受到广大养殖户的青睐。特别是在山林生态养鸡领域&#xff0c;智能化监控方案的引入不仅提高了养殖效率&#xff0c;更有助于保障鸡只的健康与安全。视频监控系统EasyCVR视频汇聚/安防监控视频管理平台在山林生…

GD32F103RCT6/GD32F303RCT6(10)独立看门狗/窗口看门狗实验

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

vscode中更改 git托管的项目里的文件 不显示在 修改项 changes里面

目录 一、问题 二、原因及解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.在vscode中修改 从 git拉取下来的代码&#xff0c;本地不显示被修改的文件&#xff1b;文件夹只有最外层显示红色修改图标;但是里面的被修改的文件也没有被…

在Windows安装Flutter

一、安装 Android Studio 官网&#xff1a; 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 教程&#xff1a;Android Studio 安装配置教程 - Windows(详细版)-CSDN博客 Flutter 官网&#xff1a;Windows | Flutter 中文文档 - Flutter 中文开发…

为什么AI企业需要联盟营销?

AI工具市场正在迅速发展&#xff0c;现仍有不少企业陆续涌出&#xff0c;那么如何让你的工具受到目标群体的关注呢&#xff1f;这相比是AI工具营销人员一直在思考的问题。 即使这个市场正蓬勃发展&#xff0c;也无法保证营销就能轻易成功。AI工具虽然被越来越多人认可和接受&a…

自动化测试实践:揭秘WebSocket在接口测试中的应用

如何写接口自动化&#xff1f;这个问题&#xff0c;但凡涉足过自动化测试的人员都能娓娓道来。Requests、urlib、jmeter、curl等等&#xff0c;不在话下。那么&#xff0c;如何获取接口的url、参数、响应等信息呢&#xff1f;&#xff01;答案就更是随口而出&#xff1a;看接口…

深入理解Python中的包与模块

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、包的概述与功能 代码案例&#xff1a;包的结构 二、模块的划分与组合 划分模块的方法…

# 解决 win11 连接共享打印机,报错 0x00000709 问题

解决 win11 连接共享打印机&#xff0c;报错 0x00000709 问题 一、问题描述&#xff1a; 当我们连接一台共享打印机&#xff0c;出现报错 0x00000709 时&#xff0c;这是由于本机注册表本配置 RPC 远程调用&#xff0c;我们需要对自己的电脑进行修改&#xff0c;而不是主机&a…

必看项目|多维度揭示心力衰竭患者生存关键因素(生存分析、统计检验、随机森林)

1.项目背景 心力衰竭是一种严重的公共卫生问题,影响着全球数百万人的生活质量和寿命,心力衰竭的病因复杂多样,既有个体生理因素的影响,也受到环境和社会因素的制约,个体的生活方式、饮食结构和医疗状况在很大程度上决定了其心力衰竭的风险。在现代社会,随着生活水平的提…

设计软件有哪些?建模和造型工具篇(4),渲染100邀请码1a12

建模使用到的工具有很多&#xff0c;这次我们接着介绍。 1、PolyBoost PolyBoost是由Digimation公司开发的3ds Max插件&#xff0c;旨在增强软件的多边形建模功能。该插件提供了一系列强大的建模工具&#xff0c;如边缘控制、顶点编辑、面片调整等&#xff0c;使用户能够更加…

【Unity2D 2022:Particle System】添加粒子特效

一、创建粒子系统游戏物体 1. 创建粒子系统游戏物体Smog Effect 2. 给粒子特效添加精灵贴图 &#xff08;1&#xff09;启用Texture Sheet Animation&#xff08;纹理表动画&#xff09; &#xff08;2&#xff09;点击加号添加一个纹理&#xff0c;并将两张厌恶图片导入到纹理…

运维笔记:流编辑器sed命令用法解析

运维笔记 sed命令用法解析 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/arti…