每日格言:想去的地方很遥远,我们也只能自己走
前言
最短路径算法是一类用于解决图中两点间寻找最短路径问题的算法。这里我们只具体介绍利用matlab中的函数实现,迪克斯特拉算法和弗洛伊德算法大家有兴趣可上网了解一下。这类算法在多个领域都有应用,包括网络路由、交通规划、电路设计等
问题引入及求解
求解思想:最短路径上的任一子路径也是最短路径
如果现在我想以最短路径从城市0到城市8,我应该选取哪一条路线呢?
这里是单源最短路径问题即从图中的某个顶点出发,到达另一个顶点所经过的边的权重之和最小的一条路径
这里我们可以直接使用matlab中自带的shortestpath函数即可,关于画出我们的路线图前面我们在图论中以及讲过了,不记得的友友可以点下方链接查看:
图论
% 定义图的边和权重
s = [9 9 1 1 3 3 3 2 2 5 5 7 7 8]; % 起始节点编号,这里我们用9代替0
t = [1 2 2 3 4 6 7 4 5 4 7 6 8 6]; % 终止节点编号
w = [4 8 3 8 2 7 4 1 6 6 2 14 10 9]; % 边的权重
% 创建一个图形对象 G
G = graph(s,t,w);
% 绘制图形 G,并将边的权重添加到图形上
% G.Edges.Weight 表示图形对象 G 中所有边的权重值,'EdgeLabel' 表示在图形上显示这些权重值
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2)
% 隐藏图形的坐标轴
set( gca, 'XTick', [], 'YTick', [] );
% shortestpath 函数计算从节点 9 到节点 8 的最短路径和路径长度,并将路径和路径长度分别存储在 P 和 d 中
[P,d] = shortestpath(G, 9, 8)
% 在图形 G 中高亮显示最短路径
% highlight 函数高亮图形对象 myplot 中的路径 P,'EdgeColor', 'r' 表示将路径颜色设置为红色。
myplot = plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2);
highlight(myplot, P, 'EdgeColor', 'r')
总结
最短路径的matlab算法较为简单,大家可以自己实践一下