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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
Python函数嵌套实例
Sep 23 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
Python远程桌面协议RDPY安装使用介绍
Apr 15 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python实现实时监控文件的方法
Aug 26 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
python写一个随机点名软件的实例
Nov 28 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
Feb 17 Python
python selenium 获取接口数据的实现
Dec 07 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计算上一个月的今天
2013/05/23 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
js实现导航跟随效果
2018/11/17 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
跟老齐学Python之永远强大的函数
2014/09/14 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
python3实现磁盘空间监控
2018/06/21 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Django视图扩展类知识点详解
2019/10/25 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
公司财务人员岗位职责
2015/04/14 职场文书