博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] Find the Connected Component in the Undirected Graph
阅读量:6318 次
发布时间:2019-06-22

本文共 2817 字,大约阅读时间需要 9 分钟。

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
neighbors; 6 * UndirectedGraphNode(int x) : label(x) {}; 7 * }; 8 */ 9 class Solution {10 public:11 /**12 * @param nodes a array of Undirected graph node13 * @return a connected set of a Undirected graph14 */15 void dfs(vector
&nodes, vector
&path,16 unordered_set
&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
> connectedSet(vector
& nodes) {24 // Write your code here25 unordered_set
visit;26 vector
> res;27 vector
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
neighbors; 6 * UndirectedGraphNode(int x) : label(x) {}; 7 * }; 8 */ 9 class Solution {10 public:11 /**12 * @param nodes a array of Undirected graph node13 * @return a connected set of a Undirected graph14 */15 vector
> connectedSet(vector
& nodes) {16 // Write your code here17 unordered_set
visit;18 vector
> res;19 vector
path;20 queue
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 };

 

转载地址:http://bjcaa.baihongyu.com/

你可能感兴趣的文章
zip
查看>>
How to recover from root.sh on 11.2 Grid Infrastructure Failed
查看>>
rhel6下安装配置Squid过程
查看>>
《树莓派开发实战(第2版)》——1.1 选择树莓派型号
查看>>
在 Linux 下使用 fdisk 扩展分区容量
查看>>
结合AlphaGo算法和大数据的量化基本面分析法探讨
查看>>
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
《OpenACC并行编程实战》—— 导读
查看>>
机器学习:用初等数学解读逻辑回归
查看>>
find和xargs
查看>>
数据结构例程—— 交换排序之快速排序
查看>>
IOS定位服务的应用
查看>>
php引用(&)
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>