首先感谢一位博主“乐观的阿锡”分享了K最短路径算法:
参考:
MATLAB-K最短路径算法(KSP,K-shortest pathes)

在学习上述K最短路径算法时,需要调用Dijkstra算法,
为方便大家调用,将之模块化,引用烦请标明出处。

function [pathout cost] = dijkstra(netCostMatrix, source, destination)%Dijkstra算法以其提出者人名命名,理论部分请参考教材P269《最优化技术与数学建模》董文永等编清华大学出版社2010。
%代码已模块化,可以直接调用,引用请标注出处。
%若接收的destination不为空则返回起点到终点的路径和路径总权重,否则返回最短路径上前一节点的列坐标值和当前节点的永久标号值。m=netCostMatrix;n=size(netCostMatrix,1);%CostMatrix为n*n矩阵,默认行为起点列为终点,没有通路时请赋值为inf。
lub(1:n)=0;lub(source)=1;%若求出最短路径的永久标号值,设路标为1,否则为0。
d(1:n)=inf;d(source)=0;%临时存放各点的标号值,当路标为1时临时标号值即为永久标号值。
pathnode(1:n)=0;%存放最短路径上当前节点的前一点的列坐标值。
count=1;
while count<n %应用Dijkstra算法n-1次可以求处所有点间的最短路径    yb=find(lub);%列出已在最短路径上的点,默认起点已标出wb=find(lub==0);%列出未在最短路径上的点tempvalue=inf;lastpoint=source;for i=1:length(yb)for j=1:length(wb)plus=d(yb(i))+m(yb(i),wb(j));%找到与已知最短路径相接的下一节点的临时标号值if plus<tempvalue %逐个比较,以找到与已知最短路径相接的最小标号值tempvalue=plus;lastpoint=wb(j);d(lastpoint)=tempvalue;             pathnode(lastpoint)=yb(i);endendendlub(lastpoint)=1;%使时临时标号值转为永久标号值count=count+1;
endpathout=destination;%终点一定在最短路径上,通过回溯至起点找到最短路径
if ~isempty(destination)cost=d(destination);temptvalue=destination;for k=1:npathout=[pathout,pathnode(temptvalue)];if source==pathnode(temptvalue) %判断是否到达起点,若是则回溯结束返回结果pathout=fliplr(pathout);returnelseif~pathnode(temptvalue)%判断是否存在通路,若不存在则回溯结束返回结果pathout=[];cost=[];returnelse            temptvalue=pathnode(temptvalue);endend
elsecost=d;pathout=pathnode;
end
end

Dijkstra算法之matlab实现相关推荐

  1. 最短路径 Dijkstra算法的Matlab代码实现

    为了搞清楚最短路径的算法过程,自己编写代码实现dijkstra算法寻找路径 % 文件名:dijkstra.m % 时间:2020年9月12日 % 来源:https://blog.csdn.net/li ...

  2. matlab求任意点最短路径,【最短路】求两点间最短路径的改进的Dijkstra算法及其matlab实现...

    代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P18 书中提出了基于经典Dijkstra算法改进的两种算法. 其中算法Ⅱ的效率较高. 代码如下: 1 function ...

  3. matlab 流星雨,dijkstra算法及其matlab实现

    http://blog.sina.com.cn/lyqmath 简介 dijkstra算法(迪杰斯特拉算法)是一种经典的优化算法.以其应用的广泛性与简便性,值得我们去研究. Dijkstra算法是典型 ...

  4. 基于MATLAB的Dijkstra算法实现及案例分析

    摘要:为研究两地点之间距离(或耗时)最短路线规划,采用MATLAB编程的方法来实现,并利用Floyd算法记录距离(或耗时)最短路线.在不考虑各种影响因素的情况下,以随机小样本数据为例进行演示,求得由起 ...

  5. matlab实现dijkstra算法(.m文件可直接运行)

    dijkstra标记法求解单源最短路 文章目录 如只需代码,请移步后文 一.dijkstra算法介绍完整版 1.定义概览 2.算法描述 二.dijkstra介绍 简述版 三.最短路问题思路 四.mat ...

  6. 基于MATLAB的dijkstra算法及其应用

    简介 dijkstra算法(迪杰斯特拉算法)是一种经典的优化算法.以其应用的广泛性与简便性,值得我们去研究. Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径.主要特点是 ...

  7. dijkstra算法matlab程序_编程习题课 | 用最短路算法为你的小地图导航

    简介:路网拓扑的正确导入方式,运筹学算法的完整实战案例,最详细的代码讲解与分享. 引言:在研究路径选择和流量分配等交通问题时,常常会用到最短路算法.用最短路算法解决交通问题存在两个难点:一.算法的选择 ...

  8. 路径搜索 – Dijkstra 算法 (MATLAB实现)

    课程的网址:https://www.coursera.org/learn/robotics-motion-planning/home/welcome?utm_medium=email&utm_ ...

  9. dijkstra算法matlab程序_Dijkstra算法例子

    在Dijkstra算法代码下载本文涉及到的代码. 程序代码 Dijkstra算法的程序如下: function [d, p] = dijkstra(adj, s, t) % 使用dijkstra求最短 ...

最新文章

  1. sql 纵向求和_sql列统计求和
  2. 关于未能映射路径问题
  3. 存储过程语法 - 变量
  4. VS2008系列培训教程之四:What's new in C# 3.0 Visual Basic 9.0
  5. mysql中两次排序_MySQL中的两种排序方式: index和filesort
  6. Python_迭代器与生成器
  7. 计算机的复数英语怎么读,英语的复数怎么读
  8. timeview未就绪_android input anr分析
  9. Service onStartCommand 返回值
  10. Linux系统下如何配置SSH?如何开启SSH?
  11. python yield理解_Python3 中 Yield 理解与使用
  12. Nerd的套现ATM机
  13. Android学习资料网站搜集
  14. windows下安装linux环境
  15. 解决IOS播放器KxMovie播放音频卡顿的问题
  16. mysql 主从 只读,mysql主从复制(从库只读)
  17. 《英语(二)》作文案例
  18. linux scp 输入密码,scp 在脚本中使用输入密码的解决方法
  19. Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中
  20. Android系统升级

热门文章

  1. 面试官:vue项目如何部署?有遇到布署服务器后刷新404问题吗?
  2. 生态透水砖加工制作技术资料配方方法
  3. 有哪些浏览器兼容性测试,如何做好兼容性测试工作?
  4. studio的快捷键(全面)
  5. 泰迪熊的纸尿裤好吗?
  6. 攻防世界高手进阶区 ——Mary_Morton
  7. AndroidStudio图像随键盘按动在屏幕移动(按键事件)
  8. python traceback_Python 捕捉traceback异常栈信息
  9. NLP 中的epoch 与batch
  10. throw 和 throws 的区别?