zoukankan      html  css  js  c++  java
  • MATLAB 矩阵生成有向网络图

      早知道有向图和无向图差别没有想象中的大我就写到一起了。

      函数中使用的arrow画箭头函数是在这个网站下的。

     1 %函数名netplot
     2 %使用方法输入请help netplot
     3 %无返回值
     4 %函数只能处理有向图
     5 %作者:tiandsp
     6 %最后修改:2012.12.26
     7 function netplot(A,flag)
     8     %调用方法输入netplot(A,flag),无返回值
     9     %A为邻接矩阵或关联矩阵
    10     %flag=1时处理邻接矩阵
    11     %flag=2时处理关联矩阵
    12     %函数只能处理有向图
    13     if flag==1      %邻接矩阵表示有向图
    14         D_netplot(A);
    15         return;
    16     end
    17     
    18     if flag==2      %关联矩阵表示有向图
    19         [m n]=size(A);      %关联矩阵变邻接矩阵
    20         W=zeros(m,m);
    21         for i=1:n
    22             a=find(A(:,i)~=0);
    23             if A(a(1),i)==1
    24                 W(a(1),a(2))=1;
    25             else
    26                 W(a(2),a(1))=1;
    27             end
    28         end
    29         D_netplot(W);
    30         return;
    31     end
    32            
    33     function D_netplot(A)
    34         [n n]=size(A);
    35         w=floor(sqrt(n));       
    36         h=floor(n/w);        
    37         x=[];
    38         y=[];
    39         for i=1:h           %使产生的随机点有其范围,使显示分布的更广
    40             for j=1:w
    41                 x=[x 10*rand(1)+(j-1)*10];
    42                 y=[y 10*rand(1)+(i-1)*10];
    43             end
    44         end
    45         ed=n-h*w;
    46         for i=1:ed
    47            x=[x 10*rand(1)+(i-1)*10]; 
    48            y=[y 10*rand(1)+h*10];
    49         end
    50         plot(x,y,'r*');    
    51         
    52         title('网络拓扑图'); 
    53         for i=1:n
    54             for j=1:n
    55                 if A(i,j)~=0
    56                     c=num2str(A(i,j));                      %将A中的权值转化为字符型              
    57                     text((x(i)+x(j))/2,(y(i)+y(j))/2,c,'Fontsize',10);  %显示边的权值
    58                     arrow([x(i) y(i)],[x(j) y(j)]);         %带箭头的连线
    59                 end
    60                 text(x(i),y(i),num2str(i),'Fontsize',14,'color','r');   %显示点的序号            
    61                 hold on;
    62             end
    63         end  
    64     end    
    65 
    66 end

    运行结果:

  • 相关阅读:
    2016-7-4工作总结
    2016-7第一周工作总结
    2016-6-30 工作总结
    2016-6-29 工作总结
    2016-6-28 工作总结
    基于软件开发对嵌入式开发的思考
    团队项目总结
    软件工程课程总结
    图描述之:流程图
    004-二叉树的遍历
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13646401.html
Copyright © 2011-2022 走看看