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条件和循环的使用方法
Nov 01 Python
使用Python操作Elasticsearch数据索引的教程
Apr 08 Python
python对html代码进行escape编码的方法
May 04 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python爬虫实现中英翻译词典
Jun 25 Python
Python列表的切片实例讲解
Aug 20 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Python中生成ndarray实例讲解
Feb 22 Python
python 实现体质指数BMI计算
May 26 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
js获取div高度的代码
2008/08/09 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
意大利男装网店:Vrients
2019/05/02 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
好的促销活动方案
2014/08/21 职场文书
2015元旦节寄语
2014/12/08 职场文书
继承公证书格式
2015/01/26 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
python实现进度条的多种实现
2021/04/29 Python
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis