matlab求解最短路径并自动画出路线图

287 阅读1分钟

以下是运行结果,节点1到节点9的最短路径为19

 

代码如下,使用的是迪杰斯特拉算法:

S=[1 1 2 2 3 3 4 4 4 4 5 6 6 7 8]; %起始节点向量    
E=[2 3 5 4 4 6 5 7 8 6 7 8 9 9 9]; %终止节点向量
W=[1 2 12 6 3 4 4 15 7 2 7 7 15 3 10]; %边权值向量,有向图,G(9,9)=0; 9个节点
G=sparse(S,E,W); %关联矩阵的稀疏矩阵表示
G(9,9)=0;
P=biograph(G,[],'ShowWeights','on');%建立有向图对象P
H=view(P);%显示各个路径权值
[Dist,Path]=graphshortestpath(G,1,9,'Method','Dijkstra') %求节点1到节点9的最短路径
set(H.Nodes(Path),'Color',[1 0.4 0.4]);%以下三条语句用红色修饰最短路径
edges=getedgesbynodeid(H,get(H.Nodes(Path),'ID'));
set(edges,'LineColor',[1 0 0]);
set(edges,'LineWidth',2.0);

  

 

另,弗洛伊德版本如下:

n=32;
[w,txt,raw]=xlsread('E:\w.xls');
w(isnan(w))=0
%Floyd算法求每对顶点之间的最短距离
M=max(max(w))*n^2;%M为充分大的正实数
d=w+((w==0)-eye(n))*M;
path=zeros(n);
for k=1:n
  for i=1:n
    for j=1:n
      if d(i,j)>d(i,k)+d(k,j)
         d(i,j)=d(i,k)+d(k,j);
         path(i,j)=k;
      end
    end
  end
end
d
path
xlswrite('E:\Path.xlsx,',path,'sheet1','a1');
xlswrite('E:\FILE.xlsx',d,'sheet1','a1');
ans=1