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中类的一些方法分析
Sep 25 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
python Tkinter版学生管理系统
Feb 20 Python
Python实现TCP通信的示例代码
Sep 09 Python
Django实现网页分页功能
Oct 31 Python
pytorch masked_fill报错的解决
Feb 18 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
新手学python应该下哪个版本
Jun 11 Python
django数据模型中null和blank的区别说明
Sep 02 Python
python opencv旋转图片的使用方法
Jun 04 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
全国FM电台频率大全 - 9 上海市
2020/03/11 无线电
PHP添加Xdebug扩展的方法
2014/02/12 PHP
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
解决Mac node版本升级失败的问题
2018/05/16 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
django 创建过滤器的实例详解
2017/08/14 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python itertools.product方法代码实例
2020/03/27 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
前台接待的工作职责
2013/11/21 职场文书
计算机个人求职信范例
2014/01/24 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书