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中用datetime包进行对时间的一些操作
Jun 23 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python简单获取自身外网IP的方法
Sep 18 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python之时间和日期使用小结
Feb 14 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 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 木马攻击防御技巧
2009/06/13 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
js实现下一页页码效果
2017/03/07 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
python线程中同步锁详解
2018/04/27 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
python3爬虫之设计签名小程序
2018/06/19 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
护理学毕业生自荐信
2013/10/02 职场文书
库房主管岗位职责
2013/12/31 职场文书
工作分析计划书
2014/04/30 职场文书
平安工地建设方案
2014/05/06 职场文书
师范生求职信
2014/06/14 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers