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网络编程学习笔记(一)
Jun 09 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python多线程下载文件的方法
Jul 10 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
Python设计模式之中介模式简单示例
Jan 09 Python
python3 深浅copy对比详解
Aug 12 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
python中rb含义理解
Jun 18 Python
python利用pytesseract 实现本地识别图片文字
Dec 14 Python
详解Python牛顿插值法
May 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
php curl模拟post请求小实例
2013/11/13 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
关于Curl在Swoole协程中的解决方案详析
2019/09/12 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
使用javascript插入样式
2016/03/14 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Django 连接sql server数据库的方法
2018/06/30 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
python实现复制大量文件功能
2019/08/31 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
Python识别验证码的实现示例
2020/09/30 Python
Python模块常用四种安装方式
2020/10/20 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
初中女生自我鉴定
2013/12/19 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
工伤赔偿协议书
2014/04/15 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
行政诉讼答辩状
2015/05/21 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript