You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中获取图连通分量节点索引及两图指定分量节点对比

解决邻接矩阵连通分量节点重合统计问题

首先,咱们一步步来解决你的问题——先搞定你当前卡壳的「获取图B中节点数>5的连通分量索引」,再完整实现三类节点数量的统计:


第一步:定位图B中目标连通分量的节点

你已经用conncomp拿到了Bbins(每个节点对应的连通分量标签)、Cb(唯一的分量标签)和Cb_counts(每个分量的节点数)。现在只需筛选出节点数>5的分量标签,再找到对应节点:

% 找到图B中节点数大于5的连通分量标签(也就是你说的大小为7的分量)
target_B_label = Cb(Cb_counts > 5);
% 获取该分量下的所有节点索引
nodes_B7 = find(Bbins == target_B_label);

第二步:定位图A中目标连通分量的节点

接下来要提取图A中大小为5、6的连通分量节点集合:

% 计算图A每个连通分量的节点数
Ca_counts = accumarray(ica, 1);
% 筛选出大小为5和6的分量标签
target_A_labels = Ca(ismember(Ca_counts, [5,6]));
% 获取这两个分量下的所有节点索引
nodes_A56 = find(ismember(Abins, target_A_labels));

第三步:统计三类节点数量

有了nodes_A56和nodes_B7两个节点集合,直接用MATLAB的集合运算就能得到你要的三类数量:

% 1. 图A的5、6分量与图B的7分量的共同节点数
count1 = length(intersect(nodes_A56, nodes_B7));

% 2. 不在图A的5、6分量中,但属于图B的7分量的节点数
count2 = length(setdiff(nodes_B7, nodes_A56));

% 3. 属于图A的5、6分量,但不在图B的7分量中的节点数
count3 = length(setdiff(nodes_A56, nodes_B7));

完整可运行代码

把所有步骤整合起来,替换掉你的邻接矩阵输入就能直接用:

% 替换成你的邻接矩阵
% A = ...;
% B = ...;

Abins = conncomp(graph(A)); 
Bbins = conncomp(graph(B)); 

% 处理图A的目标连通分量
[Ca, iaa, ica] = unique(Abins);
Ca_counts = accumarray(ica, 1);
target_A_labels = Ca(ismember(Ca_counts, [5,6]));
nodes_A56 = find(ismember(Abins, target_A_labels));

% 处理图B的目标连通分量
[Cb, iab, icb] = unique(Bbins);
Cb_counts = accumarray(icb,1);
target_B_label = Cb(Cb_counts > 5);
nodes_B7 = find(Bbins == target_B_label);

% 统计并输出结果
count1 = length(intersect(nodes_A56, nodes_B7));
count2 = length(setdiff(nodes_B7, nodes_A56));
count3 = length(setdiff(nodes_A56, nodes_B7));

fprintf('共同节点数:%d\n', count1);
fprintf('属于B的7分量但不属于A的5/6分量的节点数:%d\n', count2);
fprintf('属于A的5/6分量但不属于B的7分量的节点数:%d\n', count3);

内容的提问来源于stack exchange,提问作者Shew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:32:37