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 02 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
python 换位密码算法的实例详解
Jul 19 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
python的faker库用法
Nov 28 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
Python如何使用循环结构和分支结构
Apr 13 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
用header 发送cookie的php代码
2007/03/16 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python视频按帧截取图片工具
2019/07/23 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
道德之星事迹材料
2014/05/03 职场文书
幼儿发展评估方案
2014/06/11 职场文书
整改报告怎么写
2014/11/06 职场文书
业务员岗位职责
2015/02/03 职场文书
《假如》教学反思
2016/02/17 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python