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调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
Python heapq使用详解及实例代码
Jan 25 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
Python正确重载运算符的方法示例详解
Aug 27 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
Python字符串中添加、插入特定字符的方法
Sep 10 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
python如何求圆的面积
Jul 01 Python
如何解决pycharm调试报错的问题
Aug 06 Python
python+playwright微软自动化工具的使用
Feb 02 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
django 认证类配置实现
Nov 11 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
Javascript对象属性方法汇总
2013/11/21 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
分享vim python缩进等一些配置
2018/07/02 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
python操作cfg配置文件方式
2019/12/22 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
院药学专业个人求职信
2013/09/21 职场文书
见习期自我鉴定
2013/11/07 职场文书
学习委员竞选稿
2015/11/20 职场文书