[LintCode]图是否是树
来源:互联网 发布:温州管家婆软件 编辑:程序博客网 时间:2024/06/05 03:32
http://www.lintcode.com/zh-cn/problem/graph-valid-tree/#
解法一:并查集
id[i]保存当前结点i的根节点,因为如果有公共根节点,那么再相连就一定成环,每次find的时候将不是root的置为root
public class Solution { /** * @param n an integer * @param edges a list of undirected edges * @return true if it's a valid tree, or false */ // id保存当前结点的根节点,因为如果有公共根节点,那么再相连就一定成环 int[] id; int count; public boolean validTree(int n, int[][] edges) { // Write your code here count = n; id = new int[n]; for (int i = 0; i < n; i++) { id[i] = i; } for (int i = 0; i < edges.length; i++) { int p = edges[i][0]; int q = edges[i][1]; if (find(p) == find(q)) { return false; } else { union(p, q); } } return count == 1; } private int find(int i) { int root = i; while (root != id[root]) { root = id[root]; } while (i != root) { int tmp = id[i]; id[i] = root; i = tmp; } return root; } private void union(int i, int j) { int p = find(i); int q = find(j); if (p != q) { id[p] = q; count--; } }}
解法二:DFS用List<List<Integer>>保存连接关系,visited保存已访问位置,如果将要访问的在已访问的之中,那么就有环。
public class Solution { /** * @param n an integer * @param edges a list of undirected edges * @return true if it's a valid tree, or false */ public boolean validTree(int n, int[][] edges) { // Write your code here HashSet<Integer> visited = new HashSet<>(); List<List<Integer>> list = new LinkedList<>(); for (int i = 0; i < n; i++) { list.add(new ArrayList<Integer>()); } for (int i = 0; i < edges.length; i++) { list.get(edges[i][0]).add(edges[i][1]); list.get(edges[i][1]).add(edges[i][0]); } if (cycle(-1, 0, list, visited)) { return false; } return visited.size() == n; } private boolean cycle(Integer pre, Integer cur, List<List<Integer>> list, HashSet<Integer> visit) { visit.add(cur); for (Integer succ : list.get(cur)) { if (!succ.equals(pre)) { if (visit.contains(succ)) { return true; } else { if (cycle(cur, succ, list, visit)) { return true; } } } } return false; }}
0 0
- LintCode:图是否是树
- [LintCode]图是否是树
- 图是否是树-LintCode
- lintcode(178)图是否是树
- Google/LintCode:M-图是否是树
- lintcode graph-valid-tree 图是否是树
- *[Lintcode] Graph Valid Tree 图是否是树
- 图是否是树
- 图是否是树
- 图是否是树
- 图是否是树
- LintCode 判断一个二叉树树是否是另一个二叉树的子书
- lintCode 第一题,两个词是否是变位词
- 判断无向图是否是树
- 两个字符串是否是变位词(直接lintcode敲代码,一次通过,噢耶!)
- lintcode178. graph valid tree 图是否是树
- 算法爱好者——图是否是树 ? 待解决
- 判断是否是子树 和 判断二叉树是否平衡
- 面向对象编程的五大原则,帮助我们成为更优秀的后台开发人员!!
- java Annotation的使用和分析
- TCP与UDP详解
- __stdcall 和 __cdecl 的区别浅析
- 【Hadoop】HBase Getting Started(HBase 入门指南)
- [LintCode]图是否是树
- activiti高亮当前节点
- ios百度地图定位反地理编码
- 小博老师解析Java核心技术 ——JSwing文本型控件
- 柳峰微信公众平台开发教程企业号修改篇(企业菜单篇)
- caffe学习笔记(六)--ipython notebook安装
- 流程控制
- zookeeper 存储之文件格式分析
- word2vec源码解读