码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Graph Valid Tree

时间:2015-08-18 11:37:53      阅读:477      评论:0      收藏:0      [点我收藏+]

标签:

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> onpath(n, false), visited(n, false);
10         if (hasCycle(neighbors, 0, -1, onpath, 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>& onpath, vector<bool>& visited) {
18         if (onpath[kid]) return true;
19         onpath[kid] = visited[kid] = true;
20         for (auto neigh : neighbors[kid])
21             if (neigh != parent && hasCycle(neighbors, neigh, kid, onpath, visited))
22                 return true;
23         return onpath[kid] = false;
24     }
25 };

 

[LeetCode] Graph Valid Tree

标签:

原文地址:http://www.cnblogs.com/jcliBlogger/p/4738788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!