1 / 4
文档名称:

Dijkstra、Floyd算法Matlab,Lingo实现.doc

格式:doc   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Dijkstra、Floyd算法Matlab,Lingo实现.doc

上传人:gyzhluyin 2016/7/14 文件大小:0 KB

下载得到文件列表

Dijkstra、Floyd算法Matlab,Lingo实现.doc

文档介绍

文档介绍:Dijkstra 算法 Matlab 实现。% 求一个点到其他各点的最短路径 function [min,path]=dijkstra(w,start,terminal) %W 是邻接矩阵%start 是起始点%terminal 是终止点%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 应用举例: edge=[ 2,3,1,3,3,5,4,4,1,7,6,6,5,5,11,1,8,6,9,10,8,9, 9,10; ... 3,4,2,7,5,3,5,11,7,6,7,5,6,11,5,8,1,9,5,11,9,8,10,9; ... 3,5,8,5,6,6,1,12,7,9,9,2,2,10,10,8,8,3,7,2,9,9,2,2]; n=11; weight=inf*ones(n,n); for i=1:n weight(i,i)=0; end for i=1:size(edge,2) weight(edge(1,i),edge(2,i))=edge(3,i); end [dis,path]=dijkstra(weight,1,11) 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); Floyd 算法: matlab 程序: %floyd 算法, function [D,path,min1,path1]=floyd(a,start,terminal) %a 是邻接矩阵%start 是起始点%terminal 是终止点%D 是最小权值表%path 是最短路线表。 D=a;n=size(D,1); path=zeros(n,n); for i=1:n for j=1:n if D(i,j)~=inf path(i,j)=j; end end end for k=1:n for i=1:n for j=1:n if D(i,k)+D(k,j)<D(i,j) 应用举例: a= [0,50,inf,40,25,10 50,0,15,20,in