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