Prim生成最优树

matlabPrim算法生成最优树

clc;
NODENUM = 13;
INF = 1000;
dis = zeros(NODENUM,NODENUM);
sign = zeros(NODENUM,1);
linkss = zeros(NODENUM,NODENUM);


signnum = 1;
sign(signnum) = 1;%选择第一个点

minnum = [1,1];
 x = 1;
for k = 1:NODENUM-1
min = INF;
    for i = 1:NODENUM
        if sign(i) == 1
            for j = 1:NODENUM
                if dis(i,j)<min && linkss(i,j)~=1 &&linkss(j,i)~=1 && i~=j && sign(j)~=1
                    min = dis(i,j);
                    minnum(1,1) = i;
                    minnum(1,2) = j;
                end
            end
        end
    end
    signnum = signnum+1;
    sign(minnum(1,2)) = 1;
    disp(num2str(minnum(1,1)))
    linkss(minnum(1,1),minnum(1,2)) = 1;   
   
    disp(['第',num2str(x),'次']);
    disp(['minnum=',num2str(minnum(1,1)),' ',num2str(minnum(1,2))]);
    x = x+1;
end
    
A=[26,31];
H=[ 5,33;8,9;10,24;13,34;17,23;20,10;25,47;... 
 31,18;35,42;36,25;41,31;45,38];
hold on
PH=[A;H];
 load a:\dat\a2.txt;  %加载168个点的坐标
 PC=a2;%将168个点的坐标生成向量赋值给PC
 PT=[H;PC];  %将一级供水站和二级供水站坐标拼接起来
 plot(PT(:,1),PT(:,2),'b.');  
 plot(A(:,1),A(:,2),'g*',H(:,1),H(:,2),'ro');
hold on
sumnew = 0;
  for i=1:NODENUM
      for j=1:NODENUM
          if linkss(i,j)==1
              sumnew = sumnew+dis(i,j);
              plot([PH(i,1),PH(j,1)],[PH(i,2),PH(j,2)],'r'); 
          end  
      end
  end  
  load C:\Users\nianzhen\Desktop\数学建模\dat\dis2.txt;
  sumnew2  = 0;
  for i=1:180
      for j=1:180
          if link(i,j)==1
              sumnew2 = sumnew2+dis2(i,j);
              plot([PT(i,1),PT(j,1)],[PT(i,2),PT(j,2)],'b'); 
          end  
      end
  end  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值