让您的原始图形成为G = (V,E)
所需SET
的节点集 ( SET <= V
)
创建一个图表G' = (V',E')
,其中V' = SET
和E' = { (u,v) | (u,v) is in E and u,v is in SET }
如果图表G'
是连接的,则您有一个包含所有元素的集群。
最大簇是 中的最大连通分量G'
。
找到最大连通分量可以通过Flood fill之类的方法来完成。
(注意,首先使用带有限制的洪水填充,可以调整图的创建,G'
而无需实际构建它)。
伪代码,使用BFS查找集群:
int maximalCluster(E,SET): //SET is the set of desired nodes, E is the edges in G.
roots <- new map<node,interger>
for each node n in SET:
//run a BFS for each root,
//and count the total number of elements reachable from it
queue <- { n }
roots.put(n,1)
while (queue is not empty):
curr <- queue.takeFirst()
for each edge (curr,u) in E:
if (u is in SET):
SET.delete(u)
queue.add(u)
roots.put(roots.get(n) + 1)
return max { roots.get(v) | for each v in roots.keys }
虽然上面的伪代码没有生成G'
,但它通过仅检查其节点在 SET 中的边来模拟它。