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下自己编写web框架的一些要点
Apr 29 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
Python列表删除的三种方法代码分享
Oct 31 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
python爬虫基本知识
Mar 05 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
Python中Qslider控件实操详解
Feb 20 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
swfupload 多文件上传实现代码
2008/08/27 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
python基础教程之循环介绍
2014/08/29 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python中强大的format函数实例详解
2018/12/05 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
python实现银行账户系统
2021/02/22 Python
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
Python闭包的定义和使用方法
2022/04/11 Python