www.gusucode.com > Floyd算法、dijkstra算法、贪婪算法、遗传算法、搜索算法、蚁群算法、哈密顿环路的matlab源程序 > code/哈密顿环路/TSP.m
function f=TSP(w,v0) n=length(w); b=zeros(1,n); a=zeros(1,n); b(v0)=1; val=w(v0,2); num=1; for vi=2:n if val>w(v0,vi)&vi~=v0 val=w(v0,vi); num=vi; end end a(v0)=vi; i=1; while i<n-1 i=i+1; v=v0; while a(v)~=0 v=a(v); end j=1; while b(j)~=0 j=j+1; end if v==j j=j+1; end val=w(v,j); num=j; for vi=j:n if val>w(v,vi)&vi~=v&b(vi)~=1 val=w(v,vi); num=vi; end end a(v)=num; b(v)=1; end b(num)=1; a(num)=v0; k=0; while k==0 k=1; vi=v0; i=1; q=0; while i<n-2&q==0 vj=a(a(vi)); j=i+2; while j<n&q==0 if w(vi,vj)+w(a(vi),a(vj))<w(vi,a(vi))+w(vj,a(vj)) z=a(vi); a(vi)=vj; x=a(z); c=a(x); a(z)=a(vj); while x~=vj a(x)=z; z=x; x=c; c=a(c); end k=0; q=1; end j=j+1; vj=a(vj); end i=i+1; vi=a(vi); end end v=v0; i=1; while a(v)~=v0 way(i)=v; i=i+1; v=a(v); end way(i)=v; way