[matlab] 20.图与网络 matlab自带函数使用

matlab自带的biography(产生一个句柄) 可以用于画图

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可连接的节点编号
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重
G=sparse(R,C,W); %产生稀疏矩阵
view(biograph(G,[],'ShowW','ON')); %‘ShowW' ‘ON' 表示显示权值 ,'ShowArrows' ‘ON’为显示箭头。
graphallshortestpaths(G) %返回G的所有最短路径,以矩阵形式返回
画图及最短路

这里面R和C分别表示节点坐标x,y的标量,W表示对应两节点之间的边权值。

sparse函数会生成一个m*n的double型矩阵,m是R中最大的数字,n是C中最大的数字。

注意:如果m与n不相等,那么生成的矩阵将不是方阵,而所有的图论算法操作的矩阵都需要是方阵,所以在R和C和W的最后填补了8 7 0三个数字,来保证生成方阵,同时w=0,加权为0保证不影响结果。

 

 

路径矩阵 第一行代表第一个节点  第m列代表第一个节点到第m个节点的距离  类似的 第二行第二列代表第二个节点到第二个节点的距离为0 

无向图

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可连接的节点编号
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重
G=sparse(R,C,W);  %产生稀疏矩阵
view(biograph(G,[],'ShowW','ON','ShowArrows','off')); %‘ShowW' ‘ON' 表示显示权值 ,'ShowArrows' ‘ON’为显示箭头。
graphallshortestpaths(G+G') %无向图的最短路径,则将稀疏矩阵与其转置相加
无向图的绘制及最短路径

 

无向图的距离矩阵

求两点见最短路径为[dist path]=graphshortestpath(G,v1,v2)

v1,v2为两点。返回的dist为路径长,path为路径。

举例    [dist path]=graphshortestpath(G,1,8)

 

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可连接的节点编号
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重z
G=sparse(R,C,W);  %产生稀疏矩阵

graphallshortestpaths(G+G') %无向图的最短路径,则将稀疏矩阵与其转置相加

h=view(biograph(G,[],'showW','on')); %‘ShowW' ‘ON' 表示显示权值 ,'ShowArrows' ‘ON’为显示箭头。
edges=getedgesbynodeid(h,get(h.Nodes(path),'ID')); %获取边缘线句柄
set(h.Nodes(path),'color',[1 0 0]) %节点涂色为哄
set(edges,'LineColor',[1 0 0]) %连接线变成红色
set(edges,'LineWidth',1.5) %连接线加粗
最短路径上色

 

最小生成树

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始节点编号
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始节点可连接的节点编号
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %权重z
G=sparse(R,C,W);  %产生稀疏矩阵
G=G+G'; %此处G需为无向图,即原稀疏矩阵与其转置之和
[ST,pred] = graphminspantree(G);
view(biograph(ST,[],'ShowArrows','off','ShowWeights','on'))
最小生成树

 

转载于:https://www.cnblogs.com/clemente/p/9639191.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值