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

[LintCode] Find the Connected Component in the Undirected Graph

时间:2015-06-28 22:50:42      阅读:649      评论:0      收藏:0      [点我收藏+]

标签:

Find the Connected Component in the Undirected Graph

Find the number connected component in the undirected graph. Each node in the graph contains a label and a list of its neighbors. (a connected component (or just component) of an undirected graph is a subgraph in which any two vertices are connected to each other by paths, and which is connected to no additional vertices in the supergraph.)

 
Example

Given graph:

A------B  C
 \     |  | 
  \    |  |
   \   |  |
    \  |  |
      D   E

Return {A,B,D}, {C,E}. Since there are two connected component which is {A,B,D}, {C,E}

 

DFS:

 1 /**
 2  * Definition for Undirected graph.
 3  * struct UndirectedGraphNode {
 4  *     int label;
 5  *     vector<UndirectedGraphNode *> neighbors;
 6  *     UndirectedGraphNode(int x) : label(x) {};
 7  * };
 8  */
 9 class Solution {
10 public:
11     /**
12      * @param nodes a array of Undirected graph node
13      * @return a connected set of a Undirected graph
14      */
15     void dfs(vector<UndirectedGraphNode*> &nodes, vector<int> &path,
16             unordered_set<UndirectedGraphNode*> &visit, UndirectedGraphNode* n) {
17         visit.insert(n);
18         path.push_back(n->label);
19         for (auto &nn : n->neighbors) if (visit.find(nn) == visit.end()) {
20             dfs(nodes, path, visit, nn);
21         }
22     }
23     vector<vector<int>> connectedSet(vector<UndirectedGraphNode*>& nodes) {
24         // Write your code here
25         unordered_set<UndirectedGraphNode*> visit;
26         vector<vector<int>> res;
27         vector<int> path;
28         for (auto &n : nodes) {
29             if (visit.find(n) == visit.end()) {
30                 path.clear();
31                 dfs(nodes, path, visit, n);
32                 sort(path.begin(), path.end());
33                 res.push_back(path);
34             } 
35         }
36         return res;
37     }
38 };

 

BFS:

 1 /**
 2  * Definition for Undirected graph.
 3  * struct UndirectedGraphNode {
 4  *     int label;
 5  *     vector<UndirectedGraphNode *> neighbors;
 6  *     UndirectedGraphNode(int x) : label(x) {};
 7  * };
 8  */
 9 class Solution {
10 public:
11     /**
12      * @param nodes a array of Undirected graph node
13      * @return a connected set of a Undirected graph
14      */
15     vector<vector<int>> connectedSet(vector<UndirectedGraphNode*>& nodes) {
16         // Write your code here
17         unordered_set<UndirectedGraphNode*> visit;
18         vector<vector<int>> res;
19         vector<int> path;
20         queue<UndirectedGraphNode*> que;
21         for (auto &n : nodes) {
22             if (visit.find(n) == visit.end()) {
23                 path.clear();
24                 visit.insert(n);
25                 for (que.push(n); !que.empty(); que.pop()) {
26                     auto u = que.front();
27                     path.push_back(u->label);
28                     for (auto nn : u->neighbors) if (visit.find(nn) == visit.end()) {
29                         visit.insert(nn);
30                         que.push(nn);
31                     }
32                 }
33                 sort(path.begin(), path.end());
34                 res.push_back(path);
35             } 
36         }
37         return res;
38     }
39 };

 

[LintCode] Find the Connected Component in the Undirected Graph

标签:

原文地址:http://www.cnblogs.com/easonliu/p/4606255.html

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