MATLAB工具箱函数graphshortestpath 求带权无向图的最短通路及绘图

这是MATLAB工具箱函数生成的一个带权无向图,图中红色的节点和线表示Node1与Node2之间的最短通路。

使用graphshortestpath函数,可以输出:

①. 图中任意两个节点之间的最短距离

②. 任意两个节点之间的最短路径:此处为1→11→12→13→14→2   (数字为图中节点编号)

 

附上代码:

data=xlsread('edge.xlsx');
start=data(:,1);  %起点编号
endot=data(:,2);   %终点编号
weight=data(:,3);  %连接起点和终点的边权重
graphsize=max(max(start),max(endpt));

%更新距离矩阵
DG = sparse(start,endpt,weight,graphsize,graphsize)%求稀疏矩阵
g =tril(DG+DG')%取矩阵和转置矩阵和的下三角矩阵  
 %这一步的目的是要把稀疏矩阵化为无向

%建立无向图
p=biograph(g,[],'ShowArrows','off','ShowWeights','on');
h=view(p);%显示各个路径权值
 
% 求节点1到节点2的最短路径
[Dist,Path]=graphshortestpath(g,1,2,'Directed',false,'Method','Dijkstra') 

% 将最短路径的结点以红色显示
set(h.Nodes(Path),'Color',[1 0.4 0.4]);
% 将最短路径的弧以红色显示
edges=getedgesbynodeid(h,get(h.Nodes(Path),'ID'),get(h.Nodes(Path),'ID'));
set(edges,'LineColor',[1 0 0]);
set(edges,'LineWidth',2.0);

版权声明:本文为justKidrauhl原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。