找出有向图中的弱联通分量
来源:互联网 发布:淘宝企业店铺如何更换 编辑:程序博客网 时间:2024/04/28 17:00
请找出有向图中弱联通分量的数目。图中的每个节点包含其邻居的 1 个标签和1 个列表。 (一个有向图中的相连节点指的是一个包含 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; }}
0 0
- 找出有向图中的弱联通分量
- 题目:找出有向图中的弱联通分量
- 有向图的强联通分量
- 有向图强联通分量uvalive4287
- 有向图求强联通分量
- 有向图的强联通分量 tarjan
- 求有向图强联通分量--Tarjan算法
- TOJ 2233.WTommy's Trouble【有向图的强联通分量】
- 有向图的强联通分量Tarjan算法模版(hdu1269)
- poj 2186 Popular Cows (有向图的联通分量问题)
- 求解有向图的强联通分量的Java实现
- 求解有向图的强联通分量--tarjan算法(tarjian求最小环模板)
- 求无向图中的桥 和 边的双联通分量
- 无向图的边双联通分量,点双联通分量
- HDOJ 3861 - The King’s Problem tarjan求强联通分量&缩点&有向图最小路径覆盖(匈牙利)
- 无向图的联通分量NEUACM1134: Searching for TwoBee
- 算法期中1007. 怪兽训练 (找出有向图中所有的强连通分量的Kosaraju算法)
- bzoj1654[The Cow Prom 奶牛舞会] tarjan求有向无环图的强联通分量
- mkdir-无法创建目录-过多的连接
- java题目
- matlab求解-a(发展系数)的方法。
- 如何查询oracle中sql操作的记录
- android新版本中如何解决厂商应用的su权限
- 找出有向图中的弱联通分量
- Linux基础指令大全
- Eclipse快捷键
- linux下的C语言开发(线程等待)
- 二分法和牛顿迭代法求平方根(Python实现)
- Android部分厂商手机无法连接Mac系统进行调试的解决方法
- 简介
- #if _MSC_VER > 1000 #pragma once #endif 作用解释
- 加载DLL