找出有向图中的弱联通分量
2015-10-09 10:26
330 查看
请找出有向图中弱联通分量的数目。图中的每个节点包含其邻居的 1 个标签和1 个列表。 (一个有向图中的相连节点指的是一个包含 2 个通过直接边沿路径相连的顶点的子图。)
您在真实的面试中是否遇到过这个题?
Yes
样例
给定图:
返回
图中有 2 个相连要素,即
挑战
将原素升序排列。
解法:
采用并查集
您在真实的面试中是否遇到过这个题?
Yes
样例
给定图:
A----->B C \ | | \ | | \ | | \ v v ->D E <- F
返回
{A,B,D}, {C,E,F}.
图中有 2 个相连要素,即
{A,B,D} 和 {C,E,F}。
挑战
将原素升序排列。
解法:
采用并查集
import java.util.Map.Entry; /** * Definition for Directed graph. * class DirectedGraphNode { * int label; * ArrayList<DirectedGraphNode> neighbors; * DirectedGraphNode(int x) { label = x; neighbors = new ArrayList<DirectedGraphNode>(); } * }; */ public class Solution { /** * @param nodes a array of Directed graph node * @return a connected set of a directed graph */ public List<List<Integer>> connectedSet2(ArrayList<DirectedGraphNode> nodes) { Map<Integer, Integer> father = new HashMap<Integer, Integer>(); for(DirectedGraphNode curNode : nodes) { for(DirectedGraphNode curNNode : curNode.neighbors) { int curP = find(father, curNode.label); int curNP = find(father, curNNode.label); if(curP != curNP) { if(curP > curNP) { father.put(curP, curNP); } else { father.put(curNP, curP); } } } } Map<Integer, List<Integer>> tMap = new HashMap<Integer, List<Integer>>(); for(DirectedGraphNode curNode : nodes) { int curF = find(father, curNode.label); if(!tMap.containsKey(curF)) { List<Integer> tmpList = new ArrayList<Integer>(); tmpList.add(curNode.label); tMap.put(curF, tmpList); } else { tMap.get(curF).add(curNode.label); } } List<List<Integer>> ans = new ArrayList<List<Integer>>(); Set<Entry<Integer, List<Integer>>> entrySet = tMap.entrySet(); for(Entry<Integer, List<Integer>> curEntry : entrySet) { ans.add(curEntry.getValue()); } return ans; } private int find(Map<Integer, Integer> father, int cur) { if(!father.containsKey(cur)) { father.put(cur, cur); return cur; } while(father.get(cur) != cur) { cur = father.get(cur); } return cur; } }
相关文章推荐
- MVC设计模式
- vs重装找不到 $(WindowsSdkDir) 配置问题
- mysql+quartz
- Angularjs基础知识
- C++中的指针与引用、如何参数传递
- PSR-3 日志接口规范 (中文版)
- C++中的指针与引用、如何参数传递
- TCP的流模式与UDP的报文模式对比
- JQuery AJAX 分页,跳页下一页,上一页【总结了一天啊干货】
- 一般来说我们总会在设置Block之后,在合适的时间回调Block,而不希望回调Block的时候Block已经被释放了,所以我们需要对Block进行copy,copy到堆中,以便后用。 当一个Bloc
- 人工智能●专家系统
- [LintCode] Palindrome Partitioning II
- 词法分析
- 文件File封装(读、写)
- 欢迎使用CSDN-markdown编辑器
- cocoapods一些坑
- 1人制作手游2月收入1259万:开发者意外成功的背后
- QT5 在VS里用QT Designer 打开UI文件资源丢失情况解决
- android中的ListView与ScrollView冲突保留ScrollView滚动
- PSR-2 代码风格指南