通过BFS 和 DFS两种方法找无向图的连通分量
2015-12-20 14:10
776 查看
class Solution { public: /** * @param nodes a array of Undirected graph node * @return a connected set of a Undirected graph */ // BFS vector<vector<int>> connectedSet1(vector<UndirectedGraphNode*>& nodes) { // Write your code here vector<vector<int>> result; unordered_map<UndirectedGraphNode *, bool> map;// if visited or not for(UndirectedGraphNode * node : nodes){ if(map.find(node) != map.end()){ continue; } queue<UndirectedGraphNode*> q; q.push(node); map[node] = true; vector<int> row;// 一个子图 或者说 一个group节点 while(!q.empty()){ UndirectedGraphNode * now = q.front(); q.pop(); row.push_back(now->label); for(int j = 0; j < now->neighbors.size(); j++){ UndirectedGraphNode * neighbor = now->neighbors[j]; if(map.find(neighbor) == map.end()){ q.push(neighbor); map[neighbor] = true; } } } sort(row.begin(), row.end());// this is optional to make it nice looking result.push_back(row); } return result; } // DFS vector<vector<int>> connectedSet(vector<UndirectedGraphNode*>& nodes) { vector<vector<int>> result; int n = nodes.size(); unordered_map<UndirectedGraphNode*, bool> visited; for(auto node : nodes){ vector<int> component; dfs(component, node, visited); if(component.size() > 0){ sort(component.begin(), component.end());// this is optional to make it nice looking result.push_back(component); } } return result; } void dfs(vector<int> &component, UndirectedGraphNode* now, unordered_map<UndirectedGraphNode*, bool> &visited){ if(visited.find(now) != visited.end() && visited[now]){ return; } visited[now] = true; component.push_back(now->label); for(auto nb : now->neighbors){ dfs(component, nb, visited); } } };
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- C 语言实现迷宫 DFS算法
- 一幅图弄清DFT与DTFT,DFS的关系
- HDFS---Namenode
- HDFS ---- Services startup
- POJ1523 SPF dfs
- poj1731 Orders dfs
- Surrounded Regions
- Word Ladder, Gray Code
- Binary Tree Zigzag Level Order Traversal,Restore IP Addresses,Word Search,Simplify Path
- UVA 11624
- HDU1495
- DFS求岛的个数LeetCode 200. Number of Islands