【正文】
end end程序三: 計(jì)算指定兩點(diǎn)間的最短距離function [P u]=n2short(W,k1,k2)n=length(W)。m=1。 end end end m=m+1。P1=zeros(1,n)。P1(k)=k2。kk=k2。 if V(1,i)==U(k1,i) P1(k+1)=i。 k=k+1。wrow=find(P1~=0)。 k=k+1。程序四、(計(jì)算某點(diǎn)到其它所有點(diǎn)的最短距離)function[Pm D]=n1short(W,k)n=size(W,1)。for i=1:n [P d]=n2short(W,k,i)。 D(i)=d。[p2 d2]=n2short(W,t1,t2)。dt1=d1+d2+d3。[p5 d5]=n2short(W,t2,t1)。dt2=d4+d5+d6。 P=[p1 p2(2:length(p2)) p3(2:length(p3))]。 p=[p4 p5(2:length(p5)) p6(2:length(p6))]。d。 m=sum(sum(d~=0))/2。 k=1。b(2,k)=j。 k=k+1。end n=max(max(b(1:2,:)))。 [B,i]=sortrows(b39。 B=B39。T=[]。t=1:n。 c=c+B(3,i)。 tmin=min(t(B(1,i)),t(B(2,i)))。 for j=1:n if t(j)==tmax t(j)=tmin。 end endT。程序二:最小生成樹的Prim算法function [T c]=Primf(a)l=length(a)。k=1:l。listV(1)=1。while (el) min=inf。 mina(i,j) min=a(i,j)。 s=i。 end end end end listV(d)=1。 source(e)=s。 e=e+1。destination]。endc。b=d。b(b~=0)=1。a=sum(b)。ed=zeros(2,eds)。matr=b。 endendif m~=0 fprintf(39。) T=0。endif m==0 vet=1。 t1=find(matr(vet,:)==1)。 vexs(1,1)=vet。 matr(vexs(1,2),vexs(1,1))=0。tem=1。 tem=tem+1。 ed(2,eds)~=0 T=ed。 c=0。 end flagg=0。 end end endendfunction[flag ed]=edf(matr,eds,vexs,ed,tem)flag=1。 if f==1 flag=0。 end if dvex~=0 ed(:,i)=[vexs(1,i) dvex]。 matr(vexs(1,i+1),vexs(1,i))=0。 endendfunction [dvex f]=flecvexf(matr,i,vexs,eds,ed,temp)f=0。dvex=0。ded=[]。else dd=1。kkk=0。 if sum(m1)==0 dvex1(dd)=edd(kk)。 dd1=1。 end end if kkk==length(edd) tem=vexs(1,i)*ones(1,kkk)。edd]。ddd=1。 end end if lt==0 ded(ddd)=edd(l1)。 end end end if temp=length(dvex1) dvex=dvex1(temp)。 temp=length(ded) dvex=ded(temp)。 endend程序二:Hamilton改良圈算法(找出比較好的Hamilton路)function [C d1]= hamiltonglf(v)%d表示權(quán)值矩陣%C表示算法最終找到的Hamilton圈。37 84。2 99。4 50。25 38。7 64。25 62。41 26]。subplot(1,2,1)hold on。*39。 %描點(diǎn)for i=1:n str1=39。str2=num2str(i)。 text(v(i,1)1,v(i,2)2,dot)。%連線plot([v(n,1),v(1,1)],[v(n,2),v(1,2)])。 endendd2=0。 else d2=d2+d(n,1)。n=size(d,2)。for nnn=1:20 C1=C。 for k=(i+1):j C1(k)=C(j+i+1k)。 end end end end elseif n=3 if n=2 fprint(39。)。Any cirlce is the right answer.39。