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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
python读取xlsx的方法
Dec 25 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
Python错误的处理方法
Jun 23 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
python collections模块的使用
Oct 16 Python
python Xpath语法的使用
Nov 26 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面向对象 字段的声明与使用
2012/06/14 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
python中文乱码的解决方法
2013/11/04 Python
Python中max函数用法实例分析
2015/07/17 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
Django logging配置及使用详解
2019/07/23 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
公司活动邀请函
2014/01/24 职场文书
情况说明书格式范文
2014/05/06 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
2015年医务人员医德医风自我评价
2015/03/03 职场文书
2016新年慰问信范文
2015/03/25 职场文书
入党申请书怎么写?
2019/06/11 职场文书
MySQL表字段时间设置默认值
2021/05/13 MySQL
pycharm代码删除恢复的方法
2021/06/26 Python
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android