matlab使用shortestpath工具包处理Dijkstura算法最短径问题
对于matlab求解最短路径的问题来说,这里介绍一个工具包,减少原来采用原理写代码的复杂性。使用shortestpath工具包解决最短路径,它的好处是直接对有向加权图进行选取最短路径,不再需要使用原来的老方法实现,这大大的简化了代码,使用起来更加简单、便捷!
案例及程序如下:
%做有向赋权图的最短路径,并用其他颜色显示出来
%工具:2018a------该函数matlab2015b之后才有
%工具包:shortestpath
%时间:2020.12.25
clc
clear
s=[1,1,1,2,2,3,3,4,4,4,5,5,6,6,7]; %编号
t=[2,3,4,4,5,4,7,5,6,7,6,8,7,8,8]; %能走的下一个编号
w=[1,7,1,8,1,1,1,18,1,1,1,12,1,15,1]; %距离
G= digraph(s,t,w); %做有向图
plot(G,'EdgeLabel', G.Edges.Weight,'linewidth',2);
set(gca,'XTick',[],'YTick',[] ) ;
[P,d] = shortestpath(G,1,8); %注意:该函数matlab2015b之后才有
%在图中高亮我们的最短路径
myplot = plot(G,'EdgeLabel',G.Edges.Weight,'linewidth',2); %首先将图赋给一个变量
highlight (myplot,P,'EdgeColor','r');%对这个变量即我们刚刚绘制的图形进行高亮处理,红色显示最短路径
title('最短路径')
输出结果:
最短路径为 1 4 7 8
最短的路径长度 3
图形展示:
从图形上可以很显然的看到与输出结果一致,所以在学习的过程中要学会采用图形进行表示!因此对于做研究来说,编程是最基础的东西。
使用shortestpath工具包能够快速的解决问题,但是对于使用原理(Dijkstura算法)解决问题额也是可以的,因为使用原理虽然说比较繁琐,但是对于自己理解最短路径算法有很大的帮助!
关注知乎,欢迎留言探讨算法和编程问题!