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正则表达式的使用范例详解
Aug 08 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
21行Python代码实现拼写检查器
Jan 25 Python
Python实现的求解最大公约数算法示例
May 03 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
django如何实现视图重定向
Jul 24 Python
python Django 创建应用过程图示详解
Jul 29 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
Python操作redis和mongoDB的方法
Dec 19 Python
Python类的继承super相关原理解析
Oct 22 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下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
js function使用心得
2010/05/10 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
2014/03/27 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
AngularJS语法详解
2015/01/23 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
Django发送html邮件的方法
2015/05/26 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
python中bytes和str类型的区别
2019/10/21 Python
Python实现CAN报文转换工具教程
2020/05/05 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
python实现磁盘日志清理的示例
2020/11/05 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
高中毕业自我鉴定
2013/12/19 职场文书
竞聘演讲稿
2014/04/24 职场文书
奥运会口号
2014/06/13 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS