Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例


Posted in Python onDecember 12, 2017

本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法)。分享给大家供大家参考,具体如下:

# coding:utf-8
# Dijkstra算法——通过边实现松弛
# 指定一个点到其他各顶点的路径——单源最短路径
# 初始化图参数
G = {1:{1:0, 2:1, 3:12},
  2:{2:0, 3:9, 4:3},
  3:{3:0, 5:5},
  4:{3:4, 4:0, 5:13, 6:15},
  5:{5:0, 6:4},
  6:{6:0}}
# 每次找到离源点最近的一个顶点,然后以该顶点为重心进行扩展
# 最终的到源点到其余所有点的最短路径
# 一种贪婪算法
def Dijkstra(G,v0,INF=999):
 """ 使用 Dijkstra 算法计算指定点 v0 到图 G 中任意点的最短路径的距离
  INF 为设定的无限远距离值
  此方法不能解决负权值边的图
 """
 book = set()
 minv = v0
 # 源顶点到其余各顶点的初始路程
 dis = dict((k,INF) for k in G.keys())
 dis[v0] = 0
 while len(book)<len(G):
  book.add(minv)         # 确定当期顶点的距离
  for w in G[minv]:        # 以当前点的中心向外扩散
   if dis[minv] + G[minv][w] < dis[w]:   # 如果从当前点扩展到某一点的距离小与已知最短距离
    dis[w] = dis[minv] + G[minv][w]   # 对已知距离进行更新
  new = INF          # 从剩下的未确定点中选择最小距离点作为新的扩散点
  for v in dis.keys():
   if v in book: continue
   if dis[v] < new:
    new = dis[v]
    minv = v
 return dis
dis = Dijkstra(G,v0=1)
print("三水点靠木测试结果:")
print dis.values()

运行结果:

Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python基于twisted实现简单的web服务器
Sep 29 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
python+pygame实现坦克大战
Sep 10 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
django列表筛选功能的实现代码
Mar 27 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 Python
用Python提取PDF表格的方法
Apr 11 Python
你真的了解Python的random模块吗?
Dec 12 #Python
Python判断两个对象相等的原理
Dec 12 #Python
浅谈Django REST Framework限速
Dec 12 #Python
Django admin美化插件suit使用示例
Dec 12 #Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 #Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 #Python
Python有序查找算法之二分法实例分析
Dec 11 #Python
You might like
php缓存技术介绍
2006/11/25 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
php去除字符串中空字符的常用方法小结
2015/03/17 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python 控制语句
2011/11/03 Python
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python内置模块logging用法实例分析
2018/02/12 Python
详解Python 正则表达式模块
2018/11/05 Python
python Django 创建应用过程图示详解
2019/07/29 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
中学家长会邀请函
2014/02/03 职场文书
代理协议书范本
2014/04/22 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
施工安全汇报材料
2014/08/17 职场文书
工作失误检讨书
2015/01/26 职场文书
英文邀请函
2015/02/02 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
浅谈react useEffect闭包的坑
2021/06/08 Javascript
python ansible自动化运维工具执行流程
2021/06/24 Python
Python中with上下文管理协议的作用及用法
2022/03/18 Python