基于邻接矩阵的最短路算法(matlab实现)

%pb向量标记节点状态
%index1向量 存放已经被标记为1的节点,
 %index2向量 起始点到第i点最短通路中前一个顶点的序号
 %d向量 存放起始点到i的最短距离
clc,clear
a=zeros(6);
a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10; 
a(2,3)=15;a(2,4)=20;a(2,6)=25;
a(3,4)=10;a(3,5)=20;
a(4,5)=10;a(4,6)=25;
a(5,6)=55;
a=a+a';
a(find(a==0))=inf;          %创建邻接矩阵,可因问题修改
pb(1:length(a))=0;
index2=ones(1,length(a));    
d(1:length(a))=inf;
pb(3)=1;                     %起始位置,可修改,将下标1改为其他的
index1=3;                   %起始位置,可修改,
d(3)=0;                     %起始位置,可修改,将下标1改为其他的
temp=3;                      %起始位置,可修改
while sum(pb)<length(a)
    tb=find(pb==0);
    d(tb)=min(d(tb),d(temp)+a(temp,tb));
    tmpb=find(d(tb)==min(d(tb)));
    temp=tb(tmpb(1));
    pb(temp)=1;
    index1=[index1,temp];
    temp2=find(d(index1)==d(temp)-a(temp,index1));
    index2(temp)=index1(temp2(1));
end
d,index1,index2
发布了21 篇原创文章 · 获赞 3 · 访问量 1963

猜你喜欢

转载自blog.csdn.net/Ruanes/article/details/104194971