作业帮 > 综合 > 作业

关于matlab中的一个Dijkstra算法应用

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/24 04:16:35
关于matlab中的一个Dijkstra算法应用
算法如下:
function
[d,DD]=dijkstra(D,s)
%Dijkstra最短路算法Matlab程序用于求从起始点s到其它各点的最短路
%D为赋权邻接矩阵
%d为s到其它各点最短路径的长度
%DD记载了最短路径生成树
[m,n]=size(D);
d=inf.*ones(1,m);
d(1,s)=0;
Vdd=zeros(1,m);
dd(1,s)=1;
y=s;
DD=zeros(m,m);
DD(y,y)=1;
counter=1;
while length(find(dd==1))
关于matlab中的一个Dijkstra算法应用
这个算法算起始点到其他点的最短路径.
function [d,index1,index2]=Dijkf(a)
%两点间最短距离的Dijkstra算法
% a表示图的权值矩阵
% d表示所求最短路的权和
% index1 表示标号顶点的顺序
% index2 表示标号顶点索引
% 起始点为第一个点
%参数初始化
M=max(max(a));
pb(1:length(a))=0;
pb(1)=1;
index1=1;
index2=ones(1:length(a));
d(1:length(a))=M;
d(1)=0;
temp=1;
%更新l(v),同时记录顶点顺序和顶点索引
while sum(pb)=2
index=index(1);
end
index2(temp)=index; %记录标号索引
end

下面这个用来求任意两点间的最短距离,还能算出路线.
function [P,u]=n2shorf(W,k1,k2)
%求任意两点最短路径算法
% P 为两点k1,k2间的最短路,顶点以经过次序进行排序
% u 为最短路的长度
% 初始化
n=length(W);
U=W;
m=1;
% 利用求最短路的Floyd算法,求最短路矩阵
while mU(i,m)+U(m,j)
U(i,j)=U(i,m)+U(m,j);
end
end
end
m=m+1;
end
u=U(k1,k2);%最短距离
% 求任意给定两个顶点见的最短路包含的顶点
P1=zeros(1,n);
k=1;
P1(k)=k2;
V=ones(1,n)*inf;
kk=k2;
while kk~=k1
for i=1:n
V(1,i)=U(k1,kk)-W(i,kk);
if V(1,i)==U(k1,i)
P1(k+1)=i;
kk=i;
k=k+1;
end
end
end
k=1;
wrow=find(P1~=0);
for j=length(wrow):(-1):1
P(k)=P1(wrow(j));
k=k+1;
end
end