我想在图表中找到所有连接的组件。 这与Solution不同 例如,我的图表如下:
我想以最低的成本找到连接的组件。 我正在尝试使用DFS来查找连接的组件,然后添加覆盖数组中所有顶点的组件成本,找到它们中的最小值并返回它。 但是当我使用DFS时,我总是得到“路径”而不是覆盖所有顶点的“连通组件”。 例:
具有和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;
}
任何人都可以帮助我。
答案 0 :(得分:1)
连接组件与成本无关。 DFS可帮助您查找连接的组件。您可以将顶点标记为1表示第一个组件,2表示第二个组件,依此类推。
当您以最低成本说出连接组件时,我认为您使用了错误的术语。也许你的意思是最小生成树。 如果你真的想以最低成本找到连通分量(但你的图像只有1个分量),你可以用数字标记所有顶点,然后计算连接这些顶点的所有边的总和。
如果要在图表中找到最小生成树,可以使用Prim算法或Kruskal算法。它们都非常简单