当前位置: 首页 > news >正文

MATLAB图论合集(三)Dijkstra算法计算最短路径

本贴介绍最短路径的计算,实现方式为迪杰斯特拉算法;对于弗洛伊德算法,区别在于计算了所有结点之间的最短路径,考虑到MATLAB计算的便捷性,计算时只需要反复使用迪杰斯特拉即可,暂不介绍弗洛伊德的实现


迪杰斯特拉算法的思想,通俗的归纳来说就是:从当前结点出发,寻找一个未与当前简历连接——且路径最小的点作为下一个寻找到的地址。有关结点是否建立连接,需要一个如下的矩阵来辅助记录。

 若还未建立连接,则将前驱标记为-1,距离记录为无穷~

至于Distance内,存放的是起点到当前结点的最短距离,这一距离可能会不断更新,直到寻找到最短的路径为止~

实现的具体底代码:

  • 第一种:
[P,d] = shortestpath(G, 9, 4)

如上代码中,P表示的9与4节点之间最短路径经过的结点,而d保存的是最短路径值的总和~

  • 第二种:
D = distances(G);
D(1,2);
D(9,4);

如上代码中,D是一个存储了任意两结点之间最短路径的矩阵,通过索引访问的方式,即可求出任意两点的最短路径~

此外,如下是计算求出指定节点指定距离内部的全部结点的实现方式:

[nodeIDs,dist] = nearest(G, 2, 10); 

 注意,上述几个函数从2017a版本后才能全部使用

如下是创建图并计算图的具体实现方式:

s = [9 9 1 1 2 2 2 7 7 6 6  5  5 4];
t = [1 7 7 2 8 3 5 8 6 8 5  3  4 3];
w = [4 8 3 8 2 7 4 1 6 6 2 14 10 9];
G = graph(s,t,w);
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2) set( gca, 'XTick', [], 'YTick', [] );[P,d] = shortestpath(G, 9, 4);myplot = plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2); 
highlight(myplot, P, 'EdgeColor', 'g') ; 

结果如下,绿色即为最短路径:

http://www.lryc.cn/news/146331.html

相关文章:

  • MySQL 8.0.xx 版本解决group by分组的问题
  • 设计模式—原型模式(Prototype)
  • 【pytorch】Unfold和Fold的互逆操作
  • 【AI】《动手学-深度学习-PyTorch版》笔记(二十一):目标检测
  • 畅捷通T+用户中locked勒索病毒后该怎么办?勒索病毒解密数据恢复
  • 神仙般的css动画参考网址,使用animate.css
  • 江西抚州新能源汽车3d扫描零部件逆向抄数测量改装-CASAIM中科广电
  • 数据结构学习 --4 串
  • 探索Kotlin K2编译器和Java编译器的功能和能力
  • 如何安装chromadb
  • vue实现把字符串中的所有@内容,替换成带标签的
  • 「MySQL-00」MySQL在Linux上的安装、登录与删除
  • 8月29-31日上课内容 第五章
  • 数据库导出工具
  • ChatGPT 制作可视化柱形图突出显示第1名与最后1名
  • 前端学习记录~2023.8.10~JavaScript重难点实例精讲~第6章 Ajax
  • 2023年Java核心技术第九篇(篇篇万字精讲)
  • C#上位机中的单例应用思考
  • Python分享之redis
  • Linux常用命令——dd命令
  • DETR-《End-to-End Object Detection with Transformers》论文精读笔记
  • 网络流量监控-sniffnet
  • 验证go循环删除slice,map的操作和map delete操作不会释放底层内存的问题
  • C++二级题2
  • DataWhale 机器学习夏令营第三期——任务二:可视化分析
  • ubuntu 上安装flutter dart android studio
  • 【Golang】go交叉编译
  • 【人工智能】—_贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元
  • 学习笔记:ROS使用经验( 查看rostopic的信息)
  • 数据库——redis内存淘汰,持久化机制