ToB企服应用市场:ToB评测及商务社交产业平台

标题: 《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相 [打印本页]

作者: 一给    时间: 2024-6-14 21:41
标题: 《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相
剧情背景

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

在《庆余年 2》23集中,林相在告老还乡的路上与婉儿和大宝告别后

范闲也在与婉儿的对话中知道黑骑变更是绝密,并把近来一次告老还乡梅执礼被马匪截杀与黑骑变更日期关联在一起,范闲知道了老皇帝要杀林相消息,所以范闲必须尽快找到一条最短路径在黑骑到之前往营救林相。这时间范闲在别的一个世界带来的影象突然奔袭而来,立刻想到用于地图导航GPS的Dijkstra算法,得找到路程最短的路径赶在黑骑到达前才气救济林相,而在此之前他早就把庆国地形和路径都让人探究清楚了。知道黑骑所在位置到林相的位置大概需要75分钟。
现状输入描述



利用Dijkstra算法求解最短路径

实现原理
     以下是详细的步骤和计算过程:
步骤 1: 初始化


  1. 距离:
  2. A: 0
  3. C: ∞
  4. D: ∞
  5. E: ∞
  6. F: ∞
  7. G: ∞
  8. B: ∞
  9. 优先队列:
  10. [(0, 'A')]
复制代码
步骤 2: 处理节点A


步骤 3: 处理节点C


步骤 4: 处理节点D


  1. 距离:
  2. A: 0
  3. C: 15
  4. D: 20
  5. E: 25
  6. F: ∞
  7. G: ∞
  8. B: ∞
  9. 优先队列:
  10. [(25, 'E')]
复制代码
步骤 5: 处理节点E


步骤 6: 处理节点F


  1. 距离:
  2. A: 0
  3. C: 15
  4. D: 20
  5. E: 25
  6. F: 43
  7. G: 45
  8. B: 88
  9. 优先队列:
  10. [(45, 'G'), (88, 'B')]
复制代码
步骤 7: 处理节点G


效果

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

从这里可以看出来,王启年业务本领也是一流,跑的比骑马快

按预期时间总算到了,开始正面刚黑骑

王启年虽然辛苦,但是范闲作为老板照旧能抗事,立刻承担责任,确保拿到效果,取得业绩有超强的领导力,是一个好老板

参考代码

  1. import heapq
  2. def dijkstra(graph, start):
  3.     queue = [(0, start)]
  4.     distances = {node: float('inf') for node in graph}
  5.     distances[start] = 0
  6.     while queue:
  7.         current_distance, current_node = heapq.heappop(queue)
  8.         if current_distance > distances[current_node]:
  9.             continue
  10.         for neighbor, weight in graph[current_node].items():
  11.             distance = current_distance + weight
  12.             if distance < distances[neighbor]:
  13.                 distances[neighbor] = distance
  14.                 heapq.heappush(queue, (distance, neighbor))
  15.     return distances
  16. # 图的邻接表表示
  17. graph = {
  18.     'A': {'C': 15, 'D': 20},
  19.     'C': {'A': 15, 'E': 10},
  20.     'D': {'A': 20, 'E': 15},
  21.     'E': {'C': 10, 'D': 15, 'F': 18, 'G': 20},
  22.     'F': {'E': 18, 'B': 45},
  23.     'G': {'E': 20, 'B': 25},
  24.     'B': {'F': 45, 'G': 25}
  25. }
  26. # 计算从起点A到各节点的最短路径
  27. start = 'A'
  28. distances = dijkstra(graph, start)
  29. print(f"从{start}到各节点的最短路径: {distances}")
复制代码
写到最后

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4