python实现dijkstra最短路由算法


Posted in Python onJanuary 17, 2019

Dijkstra算法:又称迪杰斯特拉算法,迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止百度百科。

注意:Dijkstra算法不能处理包含负边的图

# dijkstra算法实现,有向图和路由的源点作为函数的输入,最短路径最为输出
def dijkstra(graph,src):
 # 判断图是否为空,如果为空直接退出
 if graph is None:
 return None
 nodes = [i for i in range(len(graph))] # 获取图中所有节点
 visited=[] # 表示已经路由到最短路径的节点集合
 if src in nodes:
 visited.append(src)
 nodes.remove(src)
 else:
 return None
 distance={src:0} # 记录源节点到各个节点的距离
 for i in nodes:
 distance[i]=graph[src][i] # 初始化
 # print(distance)
 path={src:{src:[]}} # 记录源节点到每个节点的路径
 k=pre=src
 while nodes:
 mid_distance=float('inf')
 for v in visited:
  for d in nodes:
  new_distance = graph[src][v]+graph[v][d]
  if new_distance < mid_distance:
   mid_distance=new_distance
   graph[src][d]=new_distance # 进行距离更新
   k=d
   pre=v
 distance[k]=mid_distance # 最短路径
 path[src][k]=[i for i in path[src][pre]]
 path[src][k].append(k)
 # 更新两个节点集合
 visited.append(k)
 nodes.remove(k)
 print(visited,nodes) # 输出节点的添加过程
 return distance,path
if __name__ == '__main__':
 graph_list = [ [0, 2, 1, 4, 5, 1],
  [1, 0, 4, 2, 3, 4],
  [2, 1, 0, 1, 2, 4],
  [3, 5, 2, 0, 3, 3],
  [2, 4, 3, 4, 0, 1],
  [3, 4, 7, 3, 1, 0]]

 distance,path= dijkstra(graph_list, 0) # 查找从源点0开始带其他节点的最短路径
 print(distance,path)

节点的遍历过程如下:

python实现dijkstra最短路由算法

最短路径输出:

python实现dijkstra最短路由算法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python(Tornado)模拟登录小米抢手机
Nov 12 Python
urllib2自定义opener详解
Feb 07 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
Python request操作步骤及代码实例
Apr 13 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python支持多继承吗
Jun 19 Python
Python Django获取URL中的数据详解
Nov 01 Python
Pycharm 设置默认头的图文教程
Jan 17 #Python
python实现狄克斯特拉算法
Jan 17 #Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 #Python
python最小生成树kruskal与prim算法详解
Jan 17 #Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 #Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 #Python
Python设计模式之模板方法模式实例详解
Jan 17 #Python
You might like
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
JS实现双击屏幕滚动效果代码
2015/10/28 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
环境科学专业个人求职信
2013/12/15 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
项目建议书范文
2014/05/12 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
对公司的意见和建议
2015/06/04 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
redis 限制内存使用大小的实现
2021/05/08 Redis