leetcode03. Find the Weak Connected Component in the Directed Graph
来源:互联网 发布:键盘 编程 编辑:程序博客网 时间:2024/06/07 18:43
解法
UnionFind
/** * @Author RenXintao * @Date 9/20/17 * @method: UnionFind */class UnionFind { HashMap<Integer, Integer> father = new HashMap<>(); UnionFind(HashSet<Integer> hashSet) { for (Integer now : hashSet) { father.put(now, now); } } int find(int x) { int parent = father.get(x); while (parent != father.get(parent)) { parent = father.get(parent); } return parent; } int compressed_find(int x) { int parent = father.get(x); while (parent != father.get(parent)) { parent = father.get(parent); } int next; while (x != father.get(x)) { next = father.get(x); father.put(x, parent); x = next; } return parent; } void union(int x, int y) { int fa_x = father.get(x); int fa_y = father.get(y); if (fa_x != fa_y) { father.put(fa_x, fa_y); } }}public class FindTheConnectedComponentInTheUndirectedGraph_lint_3_1 { List<List<Integer>> print(HashSet<Integer> hashSet, UnionFind uf, int n) { List<List<Integer>> ans = new ArrayList<List<Integer>>(); HashMap<Integer, List<Integer>> hashMap = new HashMap<Integer, List<Integer>>(); for (int i : hashSet) { int fa = uf.find(i); if (!hashMap.containsKey(fa)) { hashMap.put(fa, new ArrayList<Integer>()); } List<Integer> now = hashMap.get(fa); now.add(i); hashMap.put(fa, now); } for (List<Integer> now : hashMap.values()) { Collections.sort(now); ans.add(now); } return ans; } public List<List<Integer>> connnectedSet(ArrayList<UndirectedGraphNode> nodes) { HashSet<Integer> hashSet = new HashSet<>(); for (UndirectedGraphNode now : nodes) { hashSet.add(now.label); for (UndirectedGraphNode neighbour : now.neighbors) { hashSet.add(neighbour.label); } } UnionFind uf = new UnionFind(hashSet); for (UndirectedGraphNode now : nodes) { for (UndirectedGraphNode neighbour : now.neighbors) { int fnow = uf.find(now.label); int fneighbour = uf.find(neighbour.label); if (fnow != fneighbour) { uf.union(now.label, neighbour.label); } } } return print(hashSet, uf, nodes.size()); }}
阅读全文
0 0
- leetcode03. Find the Weak Connected Component in the Directed Graph
- Find the Connected Component in the Undirected Graph
- 【LintCode】在无向图中找出各极大连通子图 Find the Connected Component in the Undirected Graph
- Ch4-2: find if 2 given vertices are connected in a directed map,BFS + JUST fix the DFS recursion
- Connected Component in Undirected Graph
- LintCode 431 Connected Component in Undirected Graph
- Connectivity in a directed graph
- Judge loop in directed graph
- Clique in the Divisibility Graph
- Assign directions to edges so that the directed graph remains acyclic
- hdu4725 The Shortest Path in Nya Graph
- 周赛-Clique in the Divisibility Graph
- hdu4725 The Shortest Path in Nya Graph
- The Shortest Path in Nya Graph
- HDU4725-The Shortest Path in Nya Graph
- The Shortest Path in Nya Graph
- The Shortest Path in Nya Graph HDU
- The Shortest Path in Nya Graph HDU
- java学习笔记--面向对象
- java 百度高德实现地址转经纬度
- AndroidStudio配置ndk环境
- Android 编译7.0sdk 应用时报错 (Unsupported class version number [52.0] (maximum 51.0, Java 1.7))处理
- 安防监控直播中无插件web直播方案中实现快照抓取的功能
- leetcode03. Find the Weak Connected Component in the Directed Graph
- msfvenom 生成shellcode
- Java练习
- mysql优化
- [备战软考]操作系统
- 位运算应用
- 神经网络与深度学习学习笔记:正向传播与反向传播(未完)
- Java实现——判断数组出栈顺序
- HDU 2680 Choose the best route