请求参数为:图对应的散列表graph,开始节点start(可选,不选默认为’start’)

def solution(graph, start='start'):processed = []  # 定义列表记录已计算开销的节点parents = {}    # 定义父节点散列表costs = {}  # 定义开销散列表parents_keys = [k for k in graph.keys() if k != start]for key in parents_keys:if key in graph[start]:parents[key] = startcosts[key] = graph[start][key]else:parents[key] = Nonecosts[key] = float('inf')node = find_lowest_cost_node(costs=costs, processed=processed)  # 调用函数找到消费散列表中开销最小但未计算开销的节点while node is not None:  # 循环结束的条件为计算完所有的节点cost = costs[node]  # 获取消费散列表中当前节点已消费的值neighbors = graph[node]  # 获取到该节点的所有的邻居for n in neighbors.keys():new_cost = cost + neighbors[n]  # 计算该节点到邻居总共需要消费多少if costs[n] > new_cost:  # 如果当前消费散列表中邻居节点消费大于该节点到邻居节点所消费costs[n] = new_cost  # 更新当前消费散列表中邻居节点消费parents[n] = node  # 更新始终关系散列表中邻居节点的父节点为该节点processed.append(node)  # 将计算了消费的节点存入记录列表中node = find_lowest_cost_node(costs=costs, processed=processed)  # 调用函数找到消费散列表中开销最小但未计算开销的节点return costs, parents, processeddef find_lowest_cost_node(costs, processed):lowest_cost = float('inf')lowest_cost_node = Nonefor node in costs:cost = costs[node]if cost < lowest_cost and node not in processed:lowest_cost = costlowest_cost_node = nodereturn lowest_cost_nodeif __name__ == '__main__':graph = {'start': {'a': 6, 'b': 2}, 'a': {'end': 1}, 'b': {'a': 3, 'end': 5}, 'end': {}}for x in solution(graph=graph):print(x)

【算法图解】第七章:7.5(狄克斯特拉算法优化版)相关推荐

  1. 小白的算法初识课堂(part7)--狄克斯特拉算法

    学习笔记 学习书目:<算法图解>- Aditya Bhargava 文章目录 狄克斯特拉算法 具体步骤实现 术语 跳蚤市场 具体步骤实现 负权边 python实现 狄克斯特拉算法 在上一个 ...

  2. 算法图解第七章狄克斯特拉算法读书笔记

    广度优先搜索找出的是段数最少的路径;狄克斯特拉算法找出最快的路径. 狄克斯特拉算法包含4个步骤: 1)找出"最便宜"的节点,即可在最短时间内到达的节点. 2)更新该节点的邻居的开销 ...

  3. 狄克斯特拉算法(Dijkstra)详细解释

    文章目录 算法用途(目的) 算法思想与本质 图文解释 代码解析 算法用途(目的) 狄克斯特拉算法的用途或者说是目的是计算单源最短路径.单源最短路径的意思是从一个点出发到另外一个点最为的容易.举个例子解 ...

  4. Dijkstra(狄克斯特拉) 算法

    文章目录 加权图 算法步骤 算法实现: 适用场景: 负权边 该算法是一种计算有向无环图最短路径的算法. 加权图 其中每个数字表示时间.要计算非加权图中的最短路径,可使用广度优先搜索.要计算加权图中的最 ...

  5. 《算法图解》学习笔记(七):狄克斯特拉算法(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  6. 图解算法学习笔记(七):狄克斯特拉算法

    目录 1)使用狄克斯特拉算法 2)术语 3)实现 4)小结 本章内容; 介绍加权图,提高或降低某些边的权重: 介绍狄克斯特拉算法,找出加权图中前往X的最短路径: 介绍图中的环,它导致狄克斯特拉算法不管 ...

  7. 算法图解 第7章 狄克斯特拉算法

    本章内容 继续图的讨论,介绍加权图------提高或降低某些边的权重. 介绍狄克斯特拉算法,让你能够找出加权图中前往X的最短路径. 介绍图中的环,它导致狄克斯特拉算法不管用. 在前一章,你找出了从A点 ...

  8. 《算法图解》系列笔记(七)—— 狄克斯特拉算法

    狄克斯特拉算法(Dijkstra's algorithm) 广度优先搜索来查找两点之间的最短路径,那时"最短路径"的意思是段数最少.在狄克斯特拉算法中,你给每段都分配了一个数字或权 ...

  9. 算法图解part7:狄克斯特拉算法

    算法图解part7:狄克斯特拉(Dijkstra)算法 1.狄克斯特拉算法(Dijkstra's algorithm) 2.术语 3.负权边 4.实现狄克斯特拉算法 4.1 最短路径思路 4.2 py ...

  10. 算法之狄克斯特拉算法 --《图解算法》

    2019你好!好好生活,好好工作! 狄克斯特拉算法 狄克斯特拉算法(Dijkstra )用于计算出不存在非负权重的情况下,起点到各个节点的最短距离 可用于解决2类问题: 从A出发是否存在到达B的路径: ...

最新文章

  1. 使用 Caddy 自动化发布 Web 应用
  2. 推荐MIT的电路与电子学
  3. QT判断多级目录是否存在,不存在就创建
  4. Redis之Hash数据结构
  5. python默认参数举例_Python之在函数中使用列表作为默认参数
  6. 使用MUI框架,模拟手机端的下拉刷新,上拉加载操作。
  7. SOA(在Tuscany 中开发web service)
  8. python的进程和线程
  9. 为了项目上线而加班,真有必要吗?
  10. 编译原理教程_2 文法和语言
  11. JQuery验证车牌号(含新能源车牌)
  12. python怎么用sin_Python math.sin() 方法
  13. 高通camera结构(摄像头基础介绍)
  14. 四、降维——流形学习 (manifold learning)
  15. keep怎么弄轨迹动画_keep怎么录视频?教学视频录像和轨迹动画视频录制方法介绍...
  16. 5G NR 网络切片是什么意思
  17. 中文文本纠错算法走到多远了?
  18. java 匹配任意字符_正则表达式匹配任意字符(包括换行符)
  19. Quartz 实现画图片、写文字、画线、椭圆、矩形、棱形等 二
  20. Spring Data JPA 2. HelloWorld

热门文章

  1. oracle收集snop,SNAP收集服务器信息
  2. Redis 的发布和订阅
  3. 我用分析了42万字的歌词,为了搞清楚民谣歌手们在唱些什么
  4. OpenCV学习笔记--下载和安装
  5. python求两数最大公因数_Python求两个数的最大公约数
  6. gitbook 插入图片_【整理】Gitbook和Gitbook Editor使用心得
  7. 元宇宙「虚拟世界」,构建身临其境的社交世界
  8. 一个正项级数收敛, 它的平方也收敛吗?
  9. python剪辑视频 裁剪_用python进行视频剪辑
  10. 面试题(十二)自我介绍