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爬虫之HTTP异常处理
Nov 05 Python
给Python初学者的一些编程技巧
Apr 03 Python
python简单的函数定义和用法实例
May 07 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
详谈python中冒号与逗号的区别
Apr 18 Python
django orm 通过related_name反向查询的方法
Dec 15 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
使用Python实现跳一跳自动跳跃功能
Jul 10 Python
Python单元测试及unittest框架用法实例解析
Jul 09 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
利用Python发送邮件或发带附件的邮件
Nov 12 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
JS删除数组元素的函数介绍
2013/03/27 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
Python random模块常用方法
2014/11/03 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
python实现爬取图书封面
2018/07/05 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python 面试中 8 个必考问题
2018/11/16 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
Python中按键来获取指定的值
2019/03/02 Python
wxPython实现整点报时
2019/11/18 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
Intersport西班牙:在线体育商店
2019/11/06 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
linux面试题参考答案(3)
2012/09/13 面试题
智能电子应届生求职信
2013/11/10 职场文书
中学教师请假制度
2014/02/03 职场文书
中学生寄语大全
2014/04/03 职场文书
给校长的建议书400字
2014/05/15 职场文书
遗失说明具结保证书
2015/02/26 职场文书
毕业设计致谢词
2015/05/14 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
话题作文之诚信
2019/11/28 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL