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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python作用域用法实例详解
Mar 15 Python
Python函数的周期性执行实现方法
Aug 13 Python
python实现类之间的方法互相调用
Apr 29 Python
python 搜索大文件的实例代码
Jul 08 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
PyCharm配置anaconda环境的步骤详解
Jul 31 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
python pip如何手动安装二进制包
Sep 30 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP类的封装与继承详解
2015/09/29 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
用Python实现一个简单的线程池
2015/04/07 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
教师评优事迹材料
2014/01/10 职场文书
二年级语文教学反思
2014/02/02 职场文书
丧事主持词大全
2014/04/02 职场文书
党的生日演讲稿
2014/09/10 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript