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从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
详解Python字典小结
Oct 20 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
python+numpy实现的基本矩阵操作示例
Jul 19 Python
django迁移数据库错误问题解决
Jul 29 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
Python常用编译器原理及特点解析
Mar 23 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
pytorch 实现在测试的时候启用dropout
May 27 Python
python三子棋游戏
May 04 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错误机制知识汇总
2016/03/24 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
window.name代替cookie的实现代码
2010/11/28 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
深入理解JS正则表达式---分组
2016/07/18 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python命名空间详解
2014/08/18 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
关于Django Models CharField 参数说明
2020/03/31 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
应届毕业生自荐信
2014/05/28 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
python pyhs2 的安装操作
2021/04/07 Python
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记