Leetcode: Number of Connected Components in an Undirected Graph
2015-12-30 13:04
423 查看
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.
Use Union Find to figure out the number of connected components
public class Solution { public int countComponents(int n, int[][] edges) { unionFind uf = new unionFind(n); for (int[] edge : edges) { if (!uf.isConnected(edge[0], edge[1])) { uf.union(edge[0], edge[1]); } } return uf.findCount(); } public class unionFind{ int[] ids; int count; public unionFind(int num) { this.ids = new int[num]; for (int i=0; i<num; i++) { ids[i] = i; } this.count = num; } public int find(int i) { return ids[i]; } public void union(int i1, int i2) { int id1 = find(i1); int id2 = find(i2); if (id1 != id2) { for (int i=0; i<ids.length; i++) { if (ids[i] == id2) { ids[i] = id1; } } count--; } } public boolean isConnected(int i1, int i2) { return find(i1)==find(i2); } public int findCount() { return count; } } }
相关文章推荐
- Android:嵌入式关系型SQLite数据库、SQLiteOpenHelper、SQLiteDatabase、事务
- 用Swift做个游戏Lecture07 —— 老板,来块记分牌!
- SQL Server游标的使用【转】
- jar包发布
- D3 js学习资料
- 信息系统开发方法常用方法总结
- Gradle DSL method not found :'useLibrary()'
- 机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
- lua math.floor()的一个BUG
- CentOS系列启动流程详解
- 用Swift做个游戏Lecture06 —— 碰撞的检测
- 一个能够自己主动生成静态库,自己主动安装程序的Makefile
- jquery中ajax的使用
- [Piwik] Installing piwik for website analysis
- 根据Json快速生成C#类
- 用Swift做个游戏Lecture05 —— 真实的物理世界
- 项目管理中通过CPM算法求关键路径,最早和最晚开始时间
- VS快捷键整理(转载)
- Storm集群提交任务
- scala LinkedList 瑕疵