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的Django框架中的数据过滤功能
Jul 17 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
python虚拟环境迁移方法
Jan 03 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
python中sklearn的pipeline模块实例详解
May 21 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
python 写一个文件分发小程序
Dec 05 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 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
thinkphp缓存技术详解
2014/12/09 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
JavaScript库 开发规则
2009/01/31 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
python实现旋转和水平翻转的方法
2018/10/25 Python
Python sep参数使用方法详解
2020/02/12 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
SQL Server面试题
2016/10/17 面试题
国际贸易专业个人求职信格式
2014/02/02 职场文书
2014村务公开实施方案
2014/02/25 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
销售竞赛活动方案
2014/08/23 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
2015年护理工作总结范文
2015/04/03 职场文书