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实现RSA加密(解密)算法
Feb 17 Python
python常见的格式化输出小结
Dec 15 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
Django Paginator分页器的使用示例
Jun 23 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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的zip解压缩类pclzip使用示例
2014/03/14 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
微信小程序商城项目之侧栏分类效果(1)
2017/04/17 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
Python中max函数用于二维列表的实例
2018/04/03 Python
python斐波那契数列的计算方法
2018/09/27 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
印尼购物网站:iLOTTE
2019/10/16 全球购物
行政专员工作职责
2013/12/22 职场文书
个人收入证明范本
2014/01/12 职场文书
企业消防安全制度
2014/02/02 职场文书
抗洪救灾标语
2014/10/08 职场文书
停电放假通知
2015/04/14 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
python tkinter实现定时关机
2021/04/21 Python