matlab学习——强连通分量

本文介绍如何使用Matlab构建运动图模型,并通过sparse函数创建有向图。此外,还介绍了如何利用graphconncomp函数寻找图中的强连通分量,确保运动过渡过程的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近motion graph相关实验,发现实现运动过渡需要构建运动图,而为了避免运动过渡陷入死胡同,需要对图结构进行裁剪,方法就是计算图模型的极大强联通分量,但是自己懒得去实现,所以就去搜了一下matlab中有无相关实现,果然找到了。

国际惯例,参考网址:

Find strongly or weakly connected components in graph

创建稀疏矩阵

正文

首先是创建图结构,主要是利用sparse函数,直接看创建有向图需要指定的信息:

DG = sparse([1 1 1 2 2 3 3 4 5 6 7 7 8 9 9  9 9], ...
           [2 6 8 3 1 4 2 5 4 7 6 4 9 8 10 5 3],true,10,10)

前两个参数是维度相同的行向量,指定了图结构的某两个节点的连接,true的意思是这两个节点具有有向连接,后面的(10,10)意思是总共有10个节点。比如上述就说明了如下节点间有有向连接:

(2,1)        1
(1,2)        1
(3,2)        1
(2,3)        1
(9,3)        1
(3,4)        1
(5,4)        1
(7,4)        1
(4,5)        1
(9,5)        1
(1,6)        1
(7,6)        1
(6,7)        1
(1,8)        1
(9,8)        1
(8,9)        1
(9,10)       1

也可以用biograph可视化所构建的图模型:

h=view(biograph(DG));

这里写图片描述

看着挺简单的,直接使用sparse函数,指定某两个节点之间的连接状态即可。

寻找强连通分量的函数是graphconncomp,调用方法也很简单,直接把sparse定义的图结构丢进去:

[S,C] = graphconncomp(DG);

这里得到了两个输出,S代表当前图结构中具有多少个强连通分量,C分别指示了节点属于第几个强联通分量,比如上图的10个节点分属的强联通分量是4,4,4,1,1,2,2,4,4,3,也可以可视化

%将强联通分量标记出来
colors = jet(S);
for i = 1:numel(h.nodes)
  h.Nodes(i).Color = colors(C(i),:);
end

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风翼冰舟

额~~~优快云还能打赏了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值