zoukankan      html  css  js  c++  java
  • [LeetCode] Graph Valid Tree

    Problem Description:

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.

    For example:

    Given n = 5 and edges = [[0, 1], [0, 2], [0, 3], [1, 4]], return true.

    Given n = 5 and edges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]], return false.

    Hint:

      1. Given n = 5 and edges = [[0, 1], [1, 2], [3, 4]], what should your return? Is this case a valid tree?
      2. According to the definition of tree on Wikipedia: “a tree is an undirected graph in which any two vertices are connected by exactly one path. In other words, any connected graph without simple cycles is a tree.”

    Note: you can assume that no duplicate edges will appear in edges. Since all edges are undirected, [0, 1] is the same as [1, 0] and thus will not appear together inedges.


    As suggested by the hint, just check for cycle and connectedness in the graph. Both of these can be done via DFS.

    The code is as follows.

     1 class Solution {
     2 public:
     3     bool validTree(int n, vector<pair<int, int>>& edges) {
     4         vector<vector<int>> neighbors(n);
     5         for (auto e : edges) {
     6             neighbors[e.first].push_back(e.second);
     7             neighbors[e.second].push_back(e.first);
     8         }
     9         vector<bool> visited(n, false);
    10         if (hasCycle(neighbors, 0, -1, visited))
    11             return false;
    12         for (bool v : visited)
    13             if (!v) return false; 
    14         return true;
    15     }
    16 private:
    17     bool hasCycle(vector<vector<int>>& neighbors, int kid, int parent, vector<bool>& visited) {
    18         if (visited[kid]) return true;
    19         visited[kid] = true;
    20         for (auto neigh : neighbors[kid])
    21             if (neigh != parent && hasCycle(neighbors, neigh, kid, visited))
    22                 return true;
    23         return false;
    24     }
    25 };
  • 相关阅读:
    ABP WebApi的请求类型
    对服务器的文件或文件夹压缩
    VS运行遇到的那些坑
    asp.net core Api集成Swagger
    通过文件路径获取文件名
    读取服务器或者本地的文件夹下面的文件
    计算出 3 至 1000 范围内最大的十个素数,放入数组中,并计算出其累加和。
    LINUX 无法登入系统(2017-1-16)
    zynq里面的AXI总线(2017-1-11)
    学习随笔(2017-1-10)
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4738788.html
Copyright © 2011-2022 走看看