《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 86|回复: 0
收起左侧

[提问] 怎样做出最小生成树的图?

[复制链接]

签到天数: 24 天

[LV.4]偶尔看看III

发表于 2018-5-16 08:36:20 | 显示全部楼层 |阅读模式
function MST_Prim()  
%问题:最小生成树(Minimum Spanning Tree)  
%算法:Prim  

clc, clear;  
%% 做连接图  
data=xlsread('shujuchuli');
cityCoor=[data(:,1) data(:,2)];%城市坐标矩阵
figure
plot(cityCoor(:,1),cityCoor(:,2),'ms','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g')
legend(' 城市位置')
%%ylim([4 78])
title('城市分布图','fontsize',12)
xlabel('km','fontsize',12)
ylabel('km','fontsize',12)
%ylim([min(cityCoor(:,2))-1 max(cityCoor(:,2))+1])

grid on

%% 计算城市间距离
n=size(cityCoor,1);            %城市数目
cityDist=zeros(n,n);           %城市距离矩阵
for i=1:n
    for j=1:n
        if i~=j
            cityDist(i,j)=((cityCoor(i,1)-cityCoor(j,1))^2+...
                (cityCoor(i,2)-cityCoor(j,2))^2)^0.5;
        end
        cityDist(j,i)=cityDist(i,j);
    end
end
a=cityDist;

%% Prim算法 (思考)  
a(a==0)=inf;  
result=[];p=1;tb=2:length(a);  
while length(result)~=length(a)-1  
    temp=a(p,tb);temp=temp(:);  
    d=min(temp);  
    [jb,kb]=find(a(p,tb)==d);  
    j=p(jb(1));k=tb(kb(1));  
    result=[result,[j;k;d]];p=[p,k];tb(tb==k)=[];  
end  
disp(result);
Wt=sum(result(3,:));
%%

disp(['最短架设电线总长度:', int2str(Wt)]);  
figure
plot(cityCoor(:,1),cityCoor(:,2),'ms','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g')
hold on
i=1:33;
    x=[cityCoor(result(1,i),1),cityCoor(result(2,i),1)];
    y=[cityCoor(result(1,i),2),cityCoor(result(2,i),2)];
    plot(x,y,'k-','LineWidth',2);
legend('城市位置')
%%ylim([4 78])
title('城市分布图','fontsize',12)
xlabel('km','fontsize',12)
ylabel('km','fontsize',12)
%ylim([min(cityCoor(:,2))-1 max(cityCoor(:,2))+1])
grid on

result的前两行是城市编号,如何将结果中的城市连接起来?程序中出来的图中有几条不相关的线,我老是改不过来。

shujuchuli.xlsx

9.15 KB, 下载次数: 0, 下载积分: 贝壳 -1

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 陕ICP备08102094号  

GMT+8, 2018-5-26 02:32 , Processed in 0.109199 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表