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将html转成PDF的实现代码(包含中文)
Mar 04 Python
django实现前后台交互实例
Aug 07 Python
python如何读写csv数据
Mar 21 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
利用Python如何批量更新服务器文件
Jul 29 Python
python安装pil库方法及代码
Jun 25 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
Python调用.net动态库实现过程解析
Jun 05 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
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
Z-Blog中用到的js代码
2007/03/15 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
EsLint入门学习教程
2017/02/17 Javascript
React-Native之定时器Timer的实现代码
2017/10/04 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
iview中Select 选择器多选校验方法
2018/03/15 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
python里将list中元素依次向前移动一位
2014/09/12 Python
在Python中增加和插入元素的示例
2018/11/01 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
浅析matlab中imadjust函数
2020/02/27 Python
基于python实现对文件进行切分行
2020/04/26 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
python mock测试的示例
2020/10/19 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
what is the difference between ext2 and ext3
2013/11/03 面试题
研究生自荐信
2013/10/09 职场文书
三年级小学生评语
2014/04/22 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书