求单源最短路径的Dijkstra 算法的Matlab 程序 function [d index1 index2]=Dijkf(a) 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; while sum(pb)=2 index=index(1); end index2(temp)=index; end d; index1; index2; 求任意两点间最短路的Floy d 算法的Matlab 程序 function [D,R]=floyd(a) n=size(a,1); D=a; for i=1:n for j=1:n R(i,j)=j; end end for k=1:n for i=1:n for j=1:n if D(i,k)+D(k,j)1 return end n=max(max(E(:,1:2))); m=size(E,1); for i=1:n b(i)=0; for j=1:m if E(j,1)==i|E(j,2)==i b(i)=b(i)+1; end end end rp=rem(b,2); srp=sum(rp); switch srp case 0, eu=1; case 2, eu=0.5; otherwise, return end if srp==0 v1=1; else v1=find(rp); v1=v1(1); end vc=v1; m=size(E,1); E1=[E(:,1:2),[1:m]']; while ~isempty(E1) evc=find((E1(:,1)==vc)|(E1(:,2)==vc)); levc=length(evc); if levc==1 cEu=[cEu;E1(evc,3)]; vcold=vc; vc=sum(E1(evc,1:2))-vc; E1=E1(setdiff([1:size(E1,1)],evc),:); E2=E1(:,1:2); E2gv=E2>vcold; E2(E2gv)=E2(E2gv)-1; E1(:,1:2)=E2; if vc>vcold vc=vc-1; end if v1>vcold v1=v1-1; end else for k=1:levc E2=E1(setdiff([1:size(E1,1)],evc(k)),:); ncv=arComp(E2); nco=max(ncv); if (max(ncv)==1) cEu=[cEu;E1(evc(k),3)]; vc=sum(E1(evc(k),1:2))-vc; E1=E2; break; end end end end return 求最小生成树的 Prim 算法的 Matlab 程序 function [T e]=prim(a) T=[]; e=0; v=1; n=size(a,1); c=2:n; for j=2:n b(1,j-1)=1; b(2,j-1)=j; b(3,j-1)=a(1,j); end while size(T,2)