先向大佬致敬
图论最短距离(Shortest Path)算法动画演示-Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)_哔哩哔哩_bilibili
算法原理解释视频,来自清风老师推荐
作业题目
用matlab对上图重绘得到下图
使用shortestpath函数计算其最短路径,使用默认设置, Dijkstra算法
高亮出最短路径
P =
1 3 2 5 8
>> d
d =
12
途径v1→v3→v2→v5→v8
最短路径路程为12
详细代码如下
clear;
clc;
s=[1 1 1 3 3 2 5 4 5 6 6 5 7 5 9 9];
t=[4 2 3 2 4 5 4 6 6 5 7 7 8 8 5 8];
w=[1 6 3 2 2 1 6 10 4 10 2 3 4 6 2 3];%%将图转换为有权有向的数字语言
G = digraph(s,t,w);%%绘制有权有向图
%%有权无向图G=graph(s,t,w);当w置1时,即可视为平权/无权
%无向可以视为是特殊的有向,即两点之间有双向等权的通路
plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2)%%高亮处理
%%去除坐标,将x,y轴置零,set设置的意思
set( gca, 'XTick', [], 'YTick', [] );
[P,d] = shortestpath(G, 1, 8);%%求出两点之间的最短路径,d存储的是最短路径长度
%%P存储的是最短路径经过的节点
% 在图中高亮所求最短路径
%首先将图赋给一个变量
myplot = plot(G, 'EdgeLabel', G.Edges.Weight, 'linewidth', 2);
highlight(myplot, P, 'EdgeColor', 'r') %对这个变量即我们刚刚绘制的图形
%%进行高亮处理(给边加上r红色)EdgeColor轮廓颜色高亮
% 求出任意两点的最短路径矩阵
D = distances(G); %该函数matlab2015b之后才可用
D(1,2) % 从1到2的最短路径
D(9,4) % 从9 到 4的最短路径
D(5,1)%在此有向途中,5无法到达1,显示inf无穷大
% 找出给定范围内的所有点 nearest(G,s,d)
% 返回图形 G 中与节点 s 的距离在 d 之内的所有节点
[nodeIDs,dist] = nearest(G, 5, 20) ; %注意:该函数matlab2016a之后可用
%nodeIDs表示d范围内的点,dist表示到该点的距离