您的位置:首页 > 编程语言 > MATLAB

[置顶] 【matlab dijkstra单源最短路径算法】dijkstra单源最短路径算法实现

2017-06-09 15:33 701 查看
一、主函数

function [min,path]=dijkstra(w,start,terminal)
%%%参数说明
%%%%%%输入
% w:网络各点的邻接矩阵
% start:起点
% start:终点
%%%%%输出
% min:最短距离
% path:最短路径

n=size(w,1); label(start)=0; f(start)=start;
for i=1:n
if i~=start
label(i)=inf;
end, end
s(1)=start; u=start;
while length(s)<n
for i=1:n
ins=0;
for j=1:length(s)
if i==s(j)
ins=1;
end,  end
if ins==0
v=i;
if label(v)>(label(u)+w(u,v))
label(v)=(label(u)+w(u,v)); f(v)=u;
end, end, end
v1=0;
k=inf;
for i=1:n
ins=0;
for j=1:length(s)
if i==s(j)
ins=1;
end, end
if ins==0
v=i;
if k>label(v)
k=label(v);  v1=v;
end,  end,  end
s(length(s)+1)=v1;
u=v1;
end
min=label(terminal); path(1)=terminal;
i=1;
while path(i)~=start
path(i+1)=f(path(i));
i=i+1 ;
end
path(i)=start;
L=length(path);
path=path(L:-1:1);


二、调用例子

% % % % 单源最短路径算法dijkstra调用例子
clc,clear all
weight=[
0   4.5 inf 12.4 12.7 13.2 inf inf inf inf inf;
4.5 0   12.6    inf inf inf inf inf inf inf inf;
inf 12.6    0   5.1 inf inf inf inf inf inf 10.7;
12.4    inf 5.1 0   4.3 inf inf inf inf inf inf;
12.7    inf inf 0   0   5.2 inf inf inf inf inf;
13.2    inf inf 4.3 5.2 0   9.8 inf inf inf inf;
inf inf inf inf inf 9.8 0   2.5 inf inf inf;
inf inf inf inf inf inf 2.5 0   inf inf inf;
inf inf inf inf inf inf inf inf 0 3.1   inf;
inf inf inf inf inf inf inf inf  3.1 0  3.2;
inf inf 10.7    inf inf inf inf inf inf 3.2 0  ;
];
%%个别调用
[dis, path]=dijkstra(weight, 1, 11)

a=[];
for i=1:11
for j=1:11
[dis, path]=dijkstra(weight, i, j);
disp(['从节点',num2str(i),'到节点',num2str(j),'----最短路径为:',num2str(path),'----最短距离为:',num2str(dis)]);
a=[a, (['从节点',num2str(i),'到节点',num2str(j),'----最短路径为:',num2str(path),'----最短距离为:',num2str(dis)])];

end
end


结果:

dis =

27.8000

path =

1     2     3    11


从节点1到节点1—-最短路径为:1—-最短距离为:0

从节点1到节点2—-最短路径为:1 2—-最短距离为:4.5

从节点1到节点3—-最短路径为:1 2 3—-最短距离为:17.1

从节点1到节点4—-最短路径为:1 4—-最短距离为:12.4

从节点1到节点5—-最短路径为:1 5—-最短距离为:12.7

从节点1到节点6—-最短路径为:1 6—-最短距离为:13.2

从节点1到节点7—-最短路径为:1 6 7—-最短距离为:23

从节点1到节点8—-最短路径为:1 6 7 8—-最短距离为:25.5

从节点1到节点9—-最短路径为:1 2 3 11 10 9—-最短距离为:34.1

从节点1到节点10—-最短路径为:1 2 3 11 10—-最短距离为:31

从节点1到节点11—-最短路径为:1 2 3 11—-最短距离为:27.8

从节点2到节点1—-最短路径为:2 1—-最短距离为:4.5

从节点2到节点2—-最短路径为:2—-最短距离为:0

从节点2到节点3—-最短路径为:2 3—-最短距离为:12.6

从节点2到节点4—-最短路径为:2 1 4—-最短距离为:16.9

从节点2到节点5—-最短路径为:2 1 5—-最短距离为:17.2

从节点2到节点6—-最短路径为:2 1 6—-最短距离为:17.7

从节点2到节点7—-最短路径为:2 1 6 7—-最短距离为:27.5

从节点2到节点8—-最短路径为:2 1 6 7 8—-最短距离为:30

从节点2到节点9—-最短路径为:2 3 11 10 9—-最短距离为:29.6

从节点2到节点10—-最短路径为:2 3 11 10—-最短距离为:26.5

从节点2到节点11—-最短路径为:2 3 11—-最短距离为:23.3

从节点3到节点1—-最短路径为:3 2 1—-最短距离为:17.1

从节点3到节点2—-最短路径为:3 2—-最短距离为:12.6

从节点3到节点3—-最短路径为:3—-最短距离为:0

从节点3到节点4—-最短路径为:3 4—-最短距离为:5.1

从节点3到节点5—-最短路径为:3 4 5—-最短距离为:9.4

从节点3到节点6—-最短路径为:3 4 5 6—-最短距离为:14.6

从节点3到节点7—-最短路径为:3 4 5 6 7—-最短距离为:24.4

从节点3到节点8—-最短路径为:3 4 5 6 7 8—-最短距离为:26.9

从节点3到节点9—-最短路径为:3 11 10 9—-最短距离为:17

从节点3到节点10—-最短路径为:3 11 10—-最短距离为:13.9

从节点3到节点11—-最短路径为:3 11—-最短距离为:10.7

从节点4到节点1—-最短路径为:4 1—-最短距离为:12.4

从节点4到节点2—-最短路径为:4 1 2—-最短距离为:16.9

从节点4到节点3—-最短路径为:4 3—-最短距离为:5.1

从节点4到节点4—-最短路径为:4—-最短距离为:0

从节点4到节点5—-最短路径为:4 5—-最短距离为:4.3

从节点4到节点6—-最短路径为:4 5 6—-最短距离为:9.5

从节点4到节点7—-最短路径为:4 5 6 7—-最短距离为:19.3

从节点4到节点8—-最短路径为:4 5 6 7 8—-最短距离为:21.8

从节点4到节点9—-最短路径为:4 3 11 10 9—-最短距离为:22.1

从节点4到节点10—-最短路径为:4 3 11 10—-最短距离为:19

从节点4到节点11—-最短路径为:4 3 11—-最短距离为:15.8

从节点5到节点1—-最短路径为:5 4 1—-最短距离为:12.4

从节点5到节点2—-最短路径为:5 4 1 2—-最短距离为:16.9

从节点5到节点3—-最短路径为:5 4 3—-最短距离为:5.1

从节点5到节点4—-最短路径为:5 4—-最短距离为:0

从节点5到节点5—-最短路径为:5—-最短距离为:0

从节点5到节点6—-最短路径为:5 6—-最短距离为:5.2

从节点5到节点7—-最短路径为:5 6 7—-最短距离为:15

从节点5到节点8—-最短路径为:5 6 7 8—-最短距离为:17.5

从节点5到节点9—-最短路径为:5 4 3 11 10 9—-最短距离为:22.1

从节点5到节点10—-最短路径为:5 4 3 11 10—-最短距离为:19

从节点5到节点11—-最短路径为:5 4 3 11—-最短距离为:15.8

从节点6到节点1—-最短路径为:6 1—-最短距离为:13.2

从节点6到节点2—-最短路径为:6 1 2—-最短距离为:17.7

从节点6到节点3—-最短路径为:6 4 3—-最短距离为:9.4

从节点6到节点4—-最短路径为:6 4—-最短距离为:4.3

从节点6到节点5—-最短路径为:6 5—-最短距离为:5.2

从节点6到节点6—-最短路径为:6—-最短距离为:0

从节点6到节点7—-最短路径为:6 7—-最短距离为:9.8

从节点6到节点8—-最短路径为:6 7 8—-最短距离为:12.3

从节点6到节点9—-最短路径为:6 4 3 11 10 9—-最短距离为:26.4

从节点6到节点10—-最短路径为:6 4 3 11 10—-最短距离为:23.3

从节点6到节点11—-最短路径为:6 4 3 11—-最短距离为:20.1

从节点7到节点1—-最短路径为:7 6 1—-最短距离为:23

从节点7到节点2—-最短路径为:7 6 1 2—-最短距离为:27.5

从节点7到节点3—-最短路径为:7 6 4 3—-最短距离为:19.2

从节点7到节点4—-最短路径为:7 6 4—-最短距离为:14.1

从节点7到节点5—-最短路径为:7 6 5—-最短距离为:15

从节点7到节点6—-最短路径为:7 6—-最短距离为:9.8

从节点7到节点7—-最短路径为:7—-最短距离为:0

从节点7到节点8—-最短路径为:7 8—-最短距离为:2.5

从节点7到节点9—-最短路径为:7 6 4 3 11 10 9—-最短距离为:36.2

从节点7到节点10—-最短路径为:7 6 4 3 11 10—-最短距离为:33.1

从节点7到节点11—-最短路径为:7 6 4 3 11—-最短距离为:29.9

从节点8到节点1—-最短路径为:8 7 6 1—-最短距离为:25.5

从节点8到节点2—-最短路径为:8 7 6 1 2—-最短距离为:30

从节点8到节点3—-最短路径为:8 7 6 4 3—-最短距离为:21.7

从节点8到节点4—-最短路径为:8 7 6 4—-最短距离为:16.6

从节点8到节点5—-最短路径为:8 7 6 5—-最短距离为:17.5

从节点8到节点6—-最短路径为:8 7 6—-最短距离为:12.3

从节点8到节点7—-最短路径为:8 7—-最短距离为:2.5

从节点8到节点8—-最短路径为:8—-最短距离为:0

从节点8到节点9—-最短路径为:8 7 6 4 3 11 10 9—-最短距离为:38.7

从节点8到节点10—-最短路径为:8 7 6 4 3 11 10—-最短距离为:35.6

从节点8到节点11—-最短路径为:8 7 6 4 3 11—-最短距离为:32.4

从节点9到节点1—-最短路径为:9 10 11 3 2 1—-最短距离为:34.1

从节点9到节点2—-最短路径为:9 10 11 3 2—-最短距离为:29.6

从节点9到节点3—-最短路径为:9 10 11 3—-最短距离为:17

从节点9到节点4—-最短路径为:9 10 11 3 4—-最短距离为:22.1

从节点9到节点5—-最短路径为:9 10 11 3 4 5—-最短距离为:26.4

从节点9到节点6—-最短路径为:9 10 11 3 4 5 6—-最短距离为:31.6

从节点9到节点7—-最短路径为:9 10 11 3 4 5 6 7—-最短距离为:41.4

从节点9到节点8—-最短路径为:9 10 11 3 4 5 6 7 8—-最短距离为:43.9

从节点9到节点9—-最短路径为:9—-最短距离为:0

从节点9到节点10—-最短路径为:9 10—-最短距离为:3.1

从节点9到节点11—-最短路径为:9 10 11—-最短距离为:6.3

从节点10到节点1—-最短路径为:10 11 3 2 1—-最短距离为:31

从节点10到节点2—-最短路径为:10 11 3 2—-最短距离为:26.5

从节点10到节点3—-最短路径为:10 11 3—-最短距离为:13.9

从节点10到节点4—-最短路径为:10 11 3 4—-最短距离为:19

从节点10到节点5—-最短路径为:10 11 3 4 5—-最短距离为:23.3

从节点10到节点6—-最短路径为:10 11 3 4 5 6—-最短距离为:28.5

从节点10到节点7—-最短路径为:10 11 3 4 5 6 7—-最短距离为:38.3

从节点10到节点8—-最短路径为:10 11 3 4 5 6 7 8—-最短距离为:40.8

从节点10到节点9—-最短路径为:10 9—-最短距离为:3.1

从节点10到节点10—-最短路径为:10—-最短距离为:0

从节点10到节点11—-最短路径为:10 11—-最短距离为:3.2

从节点11到节点1—-最短路径为:11 3 2 1—-最短距离为:27.8

从节点11到节点2—-最短路径为:11 3 2—-最短距离为:23.3

从节点11到节点3—-最短路径为:11 3—-最短距离为:10.7

从节点11到节点4—-最短路径为:11 3 4—-最短距离为:15.8

从节点11到节点5—-最短路径为:11 3 4 5—-最短距离为:20.1

从节点11到节点6—-最短路径为:11 3 4 5 6—-最短距离为:25.3

从节点11到节点7—-最短路径为:11 3 4 5 6 7—-最短距离为:35.1

从节点11到节点8—-最短路径为:11 3 4 5 6 7 8—-最短距离为:37.6

从节点11到节点9—-最短路径为:11 10 9—-最短距离为:6.3

从节点11到节点10—-最短路径为:11 10—-最短距离为:3.2

从节点11到节点11—-最短路径为:11—-最短距离为:0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐