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 相关文章推荐
Python3处理文件中每个词的方法
May 22 Python
python实用代码片段收集贴
Jun 03 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
pandas 数据实现行间计算的方法
Jun 08 Python
Python查找第n个子串的技巧分享
Jun 27 Python
python os.path模块常用方法实例详解
Sep 16 Python
python实现定时发送qq消息
Jan 18 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
python中count函数简单用法
Jan 05 Python
Python celery原理及运行流程解析
Jun 13 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 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的中问验证码
2006/11/25 PHP
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
2016/01/11 PHP
深入理解PHP中的count函数
2016/05/31 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
Javascript this 函数深入详解
2016/12/13 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
wxPython 入门教程
2008/10/07 Python
python实现的简单文本类游戏实例
2015/04/28 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
Python OS模块实例详解
2019/04/15 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
小学科学教学反思
2014/01/26 职场文书
临床护士自荐信
2014/01/31 职场文书
视光学专业自荐信
2014/06/24 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技