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使用socket向客户端发送数据的方法
Apr 29 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python测试mysql写入性能完整实例
Jan 18 Python
python针对excel的操作技巧
Mar 13 Python
Python实现聊天机器人的示例代码
Jul 09 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
Oct 11 Python
python3爬取torrent种子链接实例
Jan 16 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
PyTorch 如何自动计算梯度
May 23 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中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
[02:29]大剑、皮鞭、女装,这届DOTA2勇士令状里都有
2020/07/17 DOTA
python使用nntp读取新闻组内容的方法
2015/05/08 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python星号*与**用法分析
2018/02/02 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
如何将json数据转换为python数据
2020/09/04 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
大专生简历的自我评价
2013/11/26 职场文书
初中学生评语大全
2014/04/24 职场文书
工作失职自我检讨书
2015/05/05 职场文书
《称赞》教学反思
2016/02/17 职场文书