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使用scrapy解析js示例
Jan 23 Python
python实现360的字符显示界面
Feb 21 Python
Python中生成器和yield语句的用法详解
Apr 17 Python
Python 自动化表单提交实例代码
Jun 08 Python
python对excel文档去重及求和的实例
Apr 18 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
基于Python快速处理PDF表格数据
Jun 03 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Python timeit模块原理及使用方法
Oct 10 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 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&amp;&amp;mysql)四
2006/10/09 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PDO::rollBack讲解
2019/01/29 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
javascript每日必学之多态
2016/02/23 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
angular分页指令操作
2017/01/09 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue ssr 指南详读
2018/06/29 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python中super函数的用法
2017/11/17 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
python防止随意修改类属性的实现方法
2019/08/21 Python
python多线程扫描端口(线程池)
2019/09/04 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
营销专业应届生求职信
2013/11/26 职场文书
简历的自我评价范文
2014/02/04 职场文书
食品安全承诺书
2014/05/22 职场文书
展览会邀请函
2015/02/02 职场文书
出国留学导师推荐信
2015/03/26 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
六一儿童节致辞
2015/07/31 职场文书
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android