查找图中的所有连接组件

时间:2017-07-13 08:26:05

标签: java algorithm depth-first-search connected-components

我想在图表中找到所有连接的组件。 这与Solution不同 例如,我的图表如下:

enter image description here

我想以最低的成本找到连接的组件。 我正在尝试使用DFS来查找连接的组件,然后添加覆盖数组中所有顶点的组件成本,找到它们中的最小值并返回它。 但是当我使用DFS时,我总是得到“路径”而不是覆盖所有顶点的“连通组件”。 例: enter image description here

具有和10的边A-B,A-C,A-E,B-E的分量不会作为我的代码的输出,因为它给出了路径。下面是我的递归代码。

public void dfs(int node,int[][] visited,int[] v,int p){
    //System.out.println("DFS call on node "+node+" with pathsum "+p);
    //DFS call on Node "node" so making this node visited
    v[node]=1;
    //Checking whether the all the nodes in the graph are vsited.
    //if yes add this path sum to array.
    if(wp(v)){
        System.out.println("Adding path sum "+p);
        res.add(p);
        return;
    }
    for(int i=0;i<n;i++){
    //calling dfs on all the non visited nodes which have a path to them from node "node"
        if(v[i]==0 && visited[node][i]!=0){
            int[] cl=v.clone();
            //p=p+visited[node][i];
            dfs(i,visited,cl,p+visited[node][i]);
        }
    }
    return;
}

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:1)

连接组件与成本无关。 DFS可帮助您查找连接的组件。您可以将顶点标记为1表示第一个组件,2表示第二个组件,依此类推。

当您以最低成本说出连接组件时,我认为您使用了错误的术语。也许你的意思是最小生成树。 如果你真的想以最低成本找到连通分量(但你的图像只有1个分量),你可以用数字标记所有顶点,然后计算连接这些顶点的所有边的总和。

如果要在图表中找到最小生成树,可以使用Prim算法或Kruskal算法。它们都非常简单