我有一个网络,但此网络未连接。我想知道如何在这个网络中找到最大的连接图?
答案 0 :(得分:1)
要计算节点所属的连通组件,只需运行任何类型的图搜索算法,例如breadth-first search。
要解决您的问题,请迭代网络中的所有节点并执行以下操作:
答案 1 :(得分:0)
让图形为[n] [n],如果i,j连接,则[i] [j] = 1。
你可以这样做。
count=0;/global
void dfs(int i)
{
int k;
for(k=0;k<n;k++)
if(A[i][k]==1 && !visited[k])
{
count++;
visited[k]=1;
dfs(k);
}
}
for(i=0; i < n;i++)
{
if(!visited[i])
{
count=1;
visited[i]=1;
dfs(i);
// map i with count .. here
}
}
因此,一旦您使用其中一个节点映射了网络中节点的计数。
您现在需要做的就是在地图中找到具有最大数量的节点。
所以你将获得密钥,这是一个带有计数图(i)的大型网络节点。
将所有访问的节点设置为0并再次应用dfs(i),您可以使用
连接整个网络我和你无论如何都有计数。
答案 2 :(得分:0)
另一种简单方法是使用union-find:
S = array filled with 1s (|V| elements)
for each edge (u,v) in E:
if find_set(u) != find_set(v):
sum = S[find_set(u)] + S[find_set(v)]
S[find_set(v)] = sum
S[find_set(u)] = sum
union_set(u, v)
最后,S [find_set(u)]将是节点u所属的连通组件的大小。要找到最大值,您只需要找到最大值(S)。
由于find_set和union_set都很容易实现(每行2行C ++),我发现这种方法比DFS或BFS更清晰。