网站运营和维护都是干什么的,外贸英文网站搭建的公司,安全管理系统,wordpress 配置前言
最近motion graph相关实验#xff0c;发现实现运动过渡需要构建运动图#xff0c;而为了避免运动过渡陷入死胡同#xff0c;需要对图结构进行裁剪#xff0c;方法就是计算图模型的极大强联通分量#xff0c;但是自己懒得去实现#xff0c;所以就去搜了一下matlab中…前言
最近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可视化所构建的图模型
hview(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