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实现用于测试网站访问速率的方法
May 26 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
python+splinter实现12306网站刷票并自动购票流程
Sep 25 Python
python并发和异步编程实例
Nov 15 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
用Python画小女孩放风筝的示例
Nov 23 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 Python
python实现剪贴板的操作
Jul 01 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
深入php常用函数的使用汇总
2013/06/08 PHP
php内嵌函数用法实例
2015/03/20 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
在类Unix系统上开始Python3编程入门
2015/08/20 Python
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
详解Python高阶函数
2020/08/15 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
上课迟到检讨书
2014/01/19 职场文书
《胡杨》教学反思
2014/02/16 职场文书
运动会口号16字
2014/06/07 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
行政处罚事先告知书
2015/07/01 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
创业计划书之便利店
2019/09/05 职场文书