这是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);