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中精确输出JSON浮点数的方法
Apr 18 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
Python 高级专用类方法的实例详解
Sep 11 Python
Python登录注册验证功能实现
Jun 18 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
python实现AES和RSA加解密的方法
Mar 28 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
PyCharm搭建Spark开发环境的实现步骤
Sep 05 Python
python抓取多种类型的页面方法实例
Nov 20 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
vue项目创建步骤及路由router
2020/01/14 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
python3模块smtplib实现发送邮件功能
2018/05/22 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
介绍Java的内部类
2012/10/27 面试题
.NET笔试题(20个问题)
2016/02/02 面试题
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
帮一个朋友写的求职信
2014/08/09 职场文书
单位员工收入证明样本
2014/10/09 职场文书
入党函调证明材料
2014/12/24 职场文书
python中的None与NULL用法说明
2021/05/25 Python
24年收藏2000多部退役军用电台
2022/02/18 无线电
在Python 中将类对象序列化为JSON
2022/04/06 Python
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python