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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
python中threading超线程用法实例分析
May 16 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
pycharm的console输入实现换行的方法
Jan 16 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python中调试或排错的五种方法示例
Sep 12 Python
python3实现单目标粒子群算法
Nov 14 Python
Python异常处理机制结构实例解析
Jul 23 Python
如何基于python实现年会抽奖工具
Oct 20 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
python中Mako库实例用法
Dec 31 Python
用Python可视化新冠疫情数据
Jan 18 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 加密解密内部算法
2010/04/22 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
电大自我鉴定范文
2013/10/01 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
六一活动主持词
2015/06/30 职场文书