您的位置:首页 > 其它

leetcode Number of Connected Components in an Undirected Graph

2016-07-28 12:47 429 查看
Given 
n
 nodes labeled from 
0
 to 
n
- 1
 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph.

Example 1:

0          3
|          |
1 --- 2    4


Given 
n = 5
 and 
edges
= [[0, 1], [1, 2], [3, 4]]
, return 
2
.

Example 2:

0           4
|           |
1 --- 2 --- 3


Given 
n = 5
 and 
edges
= [[0, 1], [1, 2], [2, 3], [3, 4]]
, return 
1
.

Note:

You can assume that no duplicate edges will appear in 
edges
. Since all edges are undirected, 
[0,
1]
 is the same as 
[1, 0]
 and thus will not appear together in 
edges
.

union-find问题,思路是每个点记录其父节点的索引,每次union时找到两点对应的根节点,将根节点相连,最后遍历数组,找到所有的根节点即可:

private int[] res;
public int countComponents(int n, int[][] edges) {
res=new int
;
for(int i=0;i<n;i++)
res[i]=i;
union(edges);
int k=0;
for(int i=0;i<res.length;i++){
if(res[i]==i) k++;
}
return k;
}
public void union(int[][] edges){
for(int[] edge:edges){
int i=FindRoot(res,edge[0]);
int j=FindRoot(res,edge[1]);
res[i]=j;
}
}
public int FindRoot(int[] res,int k){
while(k!=res[k]) k=res[k];
return k;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法