迪杰斯特拉算法python实现
来源:互联网 发布:虚拟机linux网不可用 编辑:程序博客网 时间:2024/06/06 01:58
回顾下最短路径的地杰斯特拉算法
迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法
示例:
算法实现流程思路:
迪杰斯特拉算法每次只找离起点最近的一个结点,并将之并入已经访问过结点的集合(以防重复访问,陷入死循环),然后将刚找到的最短路径的结点作为中间结点来更新相邻结点的路径长度,这样循环找到图中一个个结点的最短路径。
# dists定义了图,记录着从从起点出发到其他顶点的距离dist={1:{2:1,3:12}, 2:{3:9,4:3}, 3:{5:5}, 4:{3:4,5:13,6:15}, 5:{6:4}, 6:{6:0}}cost={1:0,2:1,3:12,4:999,5:999,6:999} # 由起点(结点1)到其余顶点的最短距离,999代表无法到达parents={1:None,2:1,3:2,4:2,5:3,6:5} # parent代表到达这个结点的最短路径的前一个结点visited=[1] # 起始结点默认已经访问过
# 找到还没有访问的结点中路径最短的一个结点def findShorestNode(cost): minDist=999 node=None for i in dist.keys(): if (cost[i]<minDist)&(i not in visited): minDist=cost[i] node=i return node
# 更新最短路径node=findShorestNode(cost)while node: for i in dist[node]: # 所有node结点的邻居结点 newcost=cost[node]+dist[node][i] if newcost<cost[i]: parents[i]=node cost[i]=newcost visited.append(node) node=findShorestNode(cost)
# 打印出从1到6的最短路径parent=parents[6]while parent: print(parent) parent=parents[parent]
结果:
阅读全文
0 0
- 迪杰斯特拉算法python实现
- 排序算法python实现
- python radix算法实现
- Python 实现Apriori算法
- Python 实现 Prim算法
- bellman_ford算法 python实现
- python实现递归算法
- Python实现KNN算法
- Python实现KMP算法
- 遗传算法Python实现
- KNN算法Python实现
- BFPRT算法Python实现
- Python实现决策树算法
- python实现knn算法
- Python 实现递归算法
- Python实现KNN算法
- RC4算法Python实现
- KNN 算法 python 实现
- Linux-Flash驱动(3)-简单块设备驱动设计
- 解决VMware虚拟机被占用的问题
- Tuxedo域连接错误引出的netstat不同平台参数的区别
- MUI——设置沉浸式状态栏
- Unity3D_打碎模型(自定义碎的程度)插件--Fracturing & Destruction 1.11
- 迪杰斯特拉算法python实现
- Node.js简介
- 关于响应式布局的一些笔记---未完待续
- 【小白成长史】overflow: hidden
- Sciter中订阅事件的几种方式
- Codeforces 803 B
- Centos 7 如何卸载docker
- 解决eclipse项目验证缓慢问题
- c++ list, vector, map, set 区别与用法比较