[置顶] 【matlab dijkstra单源最短路径算法】dijkstra单源最短路径算法实现
2017-06-09 15:33
701 查看
一、主函数
二、调用例子
结果:
dis =
27.8000
path =
从节点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
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
相关文章推荐
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- Dijkstra(迪杰斯特拉)最短路径算法之matlab实现(修正+验证)
- Dijkstra算法求单源最短路径Java实现
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 迪杰斯特拉(Dijkstra)算法求解单源最短路径及其相应长度(java实现)
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路)Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- Dijkstra 最短路径算法的一种高效率实现
- Dijkstra算法求单源最短路径(二)(BFS的改版)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 算法与数据结构-单源最短路径之Dijkstra
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 贪心算法——单源最短路径 dijkstra
- Java实现Dijkstra单源最短路径
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 单源最短路径 :Dijkstra 算法
- 单源最短路径长度Dijkstra(迪杰斯特拉)算法
- Dijkstra 最短路径算法C#实现
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- Dijkstra 最短路径算法的一种高效率实现