lintcode 容易题:Find the Connected Component in the Undirected Graph 找出无向图汇总的相连要素
2015-10-13 20:31
429 查看
题目:
图中的每个节点包含其邻居的 1 个标签和 1 个列表。(一个无向图的相连节点(或节点)是一个子图,其中任意两个顶点通过路径相连,且不与超级图中的其它顶点相连。)
样例
给定图:
返回
解题:
广度优先+递归,写不出来,程序来源
Java程序:
View Code
总耗时: 7732 ms
Python程序:
找出无向图汇总的相连要素
请找出无向图中相连要素的个数。图中的每个节点包含其邻居的 1 个标签和 1 个列表。(一个无向图的相连节点(或节点)是一个子图,其中任意两个顶点通过路径相连,且不与超级图中的其它顶点相连。)
样例
给定图:
A------B C \ | | \ | | \ | | \ | | D E
返回
{A,B,D}, {C,E}。其中有 2 个相连的元素,即
{A,B,D}, {C,E}
解题:
广度优先+递归,写不出来,程序来源
Java程序:
/** * Definition for Undirected graph. * class UndirectedGraphNode { * int label; * ArrayList<UndirectedGraphNode> neighbors; * UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); } * }; */ public class Solution { /** * @param nodes a array of Undirected graph node * @return a connected set of a Undirected graph */ public List<List<Integer>> connectedSet(ArrayList<UndirectedGraphNode> nodes) { // Write your code here int m = nodes.size(); Map<UndirectedGraphNode, Boolean> visited = new HashMap<>(); for (UndirectedGraphNode node : nodes){ visited.put(node, false); } List<List<Integer>> result = new ArrayList<>(); for (UndirectedGraphNode node : nodes){ if (visited.get(node) == false){ bfs(node, visited, result); } } return result; } public void bfs(UndirectedGraphNode node, Map<UndirectedGraphNode, Boolean> visited, List<List<Integer>> result){ List<Integer>row = new ArrayList<>(); Queue<UndirectedGraphNode> queue = new LinkedList<>(); visited.put(node, true); queue.offer(node); while (!queue.isEmpty()){ UndirectedGraphNode u = queue.poll(); row.add(u.label); for (UndirectedGraphNode v : u.neighbors){ if (visited.get(v) == false){ visited.put(v, true); queue.offer(v); } } } Collections.sort(row); result.add(row); } }
View Code
总耗时: 7732 ms
Python程序:
相关文章推荐
- 纯代码创建UI界面入门(一)
- 金山云面经2015
- NCRE三级网络技术考试——八,九月总结
- 关于继承的问题
- Java中的clone方法
- MySQL-5.6.24免安装版配置方法
- Hadoop的安装和配置
- leetcode [Generate Parentlesies]解题报告
- 复杂业务简单化的一个小技巧
- zoj 3870 Team Formation
- java web 手动部署项目步骤
- Spring4.0集成Junit4测试case
- 【C++】观察者模式
- linux并发服务器(1)
- Mongodb总结3-稍微封装一下
- 斐波那契数列-台阶问题
- Mongodb总结3-稍微封装一下
- Mongodb总结3-稍微封装一下
- 安卓中页面(activity)的数据交互的方式:
- C++中进程间相互通信的十一种方法(转)