Dijkstra算法——方法(二)
2013-03-26 20:31 Keiven_LY 阅读(306) 评论(0) 收藏 举报最短路函数部分:
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;
dd=zeros(1,m);
dd(1,s)=1;
y=s;
DD=zeros(m,m);
DD(y,y)=1;
counter=1;
while length(find(dd==1))<m
for i=1:m
if dd(i)==0
d(i)=min(d(i),d(y)+D(y,i));
end
end
ddd=inf;
for i=1:m
if dd(i)==0&&d(i)<ddd
ddd=d(i);
end
end
yy=find(d==ddd);
counter=counter+1;
DD(y,yy(1,1))=counter;
DD(yy(1,1),y)=counter;
y=yy(1,1);
dd(1,y)=1;
end
主函数部分:
clear;
w=inf*ones(7);
% 邻接矩阵如下
% Inf Inf Inf 1.2000 9.2000 Inf 0.5000
% Inf Inf Inf 5.0000 Inf 3.1000 2.0000
% Inf Inf Inf Inf Inf 4.0000 1.5000
% 1.2000 5.0000 Inf Inf 6.7000 Inf Inf
% 9.2000 Inf Inf 6.7000 Inf 15.6000 Inf
% Inf 3.1000 4.0000 Inf 15.6000 Inf Inf
% 0.5000 2.0000 1.5000 Inf Inf Inf Inf
w(1,7)=0.5;w(1,4)=1.2;w(1,5)=9.2;
w(2,7)=2;w(2,4)=5;w(2,6)=3.1;
w(3,7)=1.5;w(3,6)=4;w(4,2)=5;
w(4,1)=1.2;w(4,5)=6.7;
w(5,1)=9.2; w(5,6)=15.6; w(5,4)=6.7;
w(6,2)=3.1;w(6,3)=4;w(6,5)=15.6;
w(7,1)=0.5;w(7,2)=2;w(7,3)=1.5;
[d,DD]=dijkstra(w,7) %计算节点7到其他各点的最短路,及路径上的点
计算结果如下:
d =
0.5000 2.0000 1.5000 1.7000 8.4000 5.1000 0
DD =
0 0 3 0 0 0 2
0 0 0 5 0 6 0
3 0 0 4 0 0 0
0 5 4 0 0 0 0
0 0 0 0 0 7 0
0 6 0 0 7 0 0
2 0 0 0 0 0 1
浙公网安备 33010602011771号