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中if __name__ == &quot;__main__&quot;详细解释
Oct 21 Python
Python实现LRU算法的2种方法
Jun 24 Python
Python制作爬虫采集小说
Oct 25 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
Django使用详解:ORM 的反向查找(related_name)
May 30 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
Python接口开发实现步骤详解
Apr 26 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 Python
在Python 中将类对象序列化为JSON
Apr 06 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/10/09 PHP
在PHP中使用与Perl兼容的正则表达式
2006/11/26 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
js实现随机数小游戏
2019/06/28 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
python实现socket端口重定向示例
2014/02/10 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Python中的集合类型知识讲解
2015/08/19 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
如何唤起类中的一个方法
2013/11/29 面试题
自我鉴定书范文
2013/10/02 职场文书
教育科研先进个人材料
2014/01/26 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
2014年科协工作总结
2014/12/09 职场文书
《花钟》教学反思
2016/02/17 职场文书