Python实现迪杰斯特拉算法并生成最短路径的示例代码


Posted in Python onDecember 01, 2020
def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径,并返回该路径和代价
  print("Start Dijstra Path……")
  path=[]#s-d的最短路径
  n=len(network)#邻接矩阵维度,即节点个数
  fmax=999
  w=[[0 for i in range(n)]for j in range(n)]#邻接矩阵转化成维度矩阵,即0→max
  book=[0 for i in range(n)]#是否已经是最小的标记列表
  dis=[fmax for i in range(n)]#s到其他节点的最小距离
  book[s-1]=1#节点编号从1开始,列表序号从0开始
  midpath=[-1 for i in range(n)]#上一跳列表
  for i in range(n):
    for j in range(n):
      if network[i][j]!=0:
        w[i][j]=network[i][j]#0→max
      else:
        w[i][j]=fmax
      if i==s-1 and network[i][j]!=0:#直连的节点最小距离就是network[i][j]
        dis[j]=network[i][j]
  for i in range(n-1):#n-1次遍历,除了s节点
    min=fmax
    for j in range(n):
      if book[j]==0 and dis[j]<min:#如果未遍历且距离最小
        min=dis[j]
        u=j
    book[u]=1
    for v in range(n):#u直连的节点遍历一遍
      if dis[v]>dis[u]+w[u][v]:
        dis[v]=dis[u]+w[u][v]
        midpath[v]=u+1#上一跳更新
  j=d-1#j是序号
  path.append(d)#因为存储的是上一跳,所以先加入目的节点d,最后倒置
  while(midpath[j]!=-1):
    path.append(midpath[j])
    j=midpath[j]-1
  path.append(s)
  path.reverse()#倒置列表
  print(path)
  #print(midpath)
  print(dis)
  #return path

network=[[0,1,0,2,0,0],
     [1,0,2,4,3,0],
     [0,2,0,0,1,4],
     [2,4,0,0,6,0],
     [0,3,1,6,0,2],
     [0,0,4,0,2,0]]
Dijkstra(network,1,6)

以上就是Python实现迪杰斯特拉算法并生成最短路径的示例代码的详细内容,更多关于Python实现迪杰斯特拉算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的魔法方法深入理解
Jul 09 Python
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
python写入中英文字符串到文件的方法
May 06 Python
Python3访问并下载网页内容的方法
Jul 28 Python
python 调用c语言函数的方法
Sep 29 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
Python中is和==的区别详解
Nov 15 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
python实现银行管理系统
Oct 25 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
Python pip install之SSL异常处理操作
Sep 03 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
python 检测图片是否有马赛克
Dec 01 #Python
python中pop()函数的语法与实例
Dec 01 #Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 #Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 #Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 #Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 #Python
使用python爬取抖音app视频的实例代码
Dec 01 #Python
You might like
PHP 变量类型的强制转换
2009/10/23 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
php实现中文转数字
2016/02/18 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
详细讲解JS节点知识
2010/01/31 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Python bisect模块原理及常见实例
2020/06/17 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
计算机工程学院个人求职信
2013/10/05 职场文书
医学专业毕业生个人的求职信
2013/12/04 职场文书
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
工地安全质量标语
2014/06/07 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js