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的print用法示例
Feb 11 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python绘图实现显示中文
Dec 04 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
kafka-python 获取topic lag值方式
Dec 23 Python
python 写一个性能测试工具(一)
Oct 24 Python
python 如何上传包到pypi
Dec 24 Python
Python机器学习之PCA降维算法详解
May 19 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 获取远程网页内容的函数
2009/09/08 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
php文件读取方法实例分析
2015/06/20 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
用Python编写web API的教程
2015/04/30 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
The Hut美国/加拿大:英国领先的豪华在线百货商店
2019/03/26 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
中职生自荐信
2013/10/13 职场文书
大学学年自我鉴定
2013/10/28 职场文书
营业经理岗位职责
2013/11/10 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
党员个人总结范文
2015/02/14 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript