修改圈近似算法

function main
a=zeros(6);
a(1,2)=56;a(1,3)=35;a(1,4)=21;a(1,5)=51;a(1,6)=60;
a(2,3)=21;a(2,4)=57;a(2,5)=78;a(2,6)=70; a(3,4)=36;a(3,5)=68;a(3,6)=68; a(4,5)=51;a(4,6)=61;
a(5,6)=13; a=a+a'; L=size(a,1);
c=[5 1:4 6 5]; %选取初始圈
[circle,long]=modifycircle(a,L,c)  %调用下面修改圈的子函数
%*******************************************
%以下为修改圈的子函数  可完全用作模板 a是距离矩阵 L是目标状态个数 c是一个初始解
%*******************************************
function [circle,long]=modifycircle(a,L,c);
for k=1:L
flag=0;   %退出标志
for m=1:L-2   %m为算法中的i
for n=m+2:L   %n为算法中的j
 if a(c(m),c(n))+a(c(m+1),c(n+1))<a(c(m),c(m+1))+a(c(n),c(n+1))
      c(m+1:n)=c(n:-1:m+1); flag=flag+1; %修改一次,标志加1
 end
end
end
     if flag==0   %一条边也没有修改,就返回
       long=0;   %圈长的初始值
       for i=1:L
         long=long+a(c(i),c(i+1)); %求改良圈的长度
       end
       circle=c;   %返回修改圈
       return
     end
end


评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值