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本地与全局命名空间用法实例
Jun 16 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
Python基础教程之异常详解
Jan 10 Python
python random从集合中随机选择元素的方法
Jan 23 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
python增加图像对比度的方法
Jul 12 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
python如何运行js语句
Sep 09 Python
Python用access判断文件是否被占用的实例方法
Dec 17 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一个找二层目录的小东东
2012/08/02 PHP
基于curl数据采集之单页面采集函数get_html的使用
2013/04/28 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
Javascript学习指南
2014/12/01 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
python读写json文件的简单实现
2017/04/11 Python
Python返回数组/List长度的实例
2018/06/23 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
keras topN显示,自编写代码案例
2020/07/03 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
玲玲的画教学反思
2014/02/04 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
民主生活会发言材料
2014/10/20 职场文书
开平碉楼导游词
2015/02/06 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技