leetcode Number of Connected Components in an Undirected Graph
2016-07-28 12:47
465 查看
Given
Example 1:
Given
Example 2:
Given
Note:
You can assume that no duplicate edges will appear in
union-find问题,思路是每个点记录其父节点的索引,每次union时找到两点对应的根节点,将根节点相连,最后遍历数组,找到所有的根节点即可:
nnodes labeled from
0to
n - 1and 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 = 5and
edges = [[0, 1], [1, 2], [3, 4]], return
2.
Example 2:
0 4 | | 1 --- 2 --- 3
Given
n = 5and
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; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法