(M)DFS:133. Clone Graph
来源:互联网 发布:鲜活的数据 pdf 编辑:程序博客网 时间:2024/06/07 18:18
每次搜索的时候看这个结点是不是已经被创建,是的话就返回其copy,否则就创建,然后再依次深度遍历其邻居结点并将其加入邻居集合中去
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */class Solution {public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(!node) return NULL; if(hash.count(node)) return hash[node]; hash[node] = new UndirectedGraphNode(node->label); for(auto val : node->neighbors) hash[node]->neighbors.push_back(cloneGraph(val)); return hash[node]; }private: unordered_map<UndirectedGraphNode *, UndirectedGraphNode *> hash; };
还有一种解法,这道题和前面一个random list的copy的题类似,关键点是建立一个map存放旧数据结构里的节点和新数据结构里的节点的对应关系。对于这个题,我一开始觉得应该先遍历一遍图,每个节点重建,完善map结构。然后再遍历一遍,把每个节点的neighbors填好。但是其实一遍遍历就可以做完:
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */class Solution {public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(!node) return NULL; map<UndirectedGraphNode*, UndirectedGraphNode*> m; queue<UndirectedGraphNode*> q; q.push(node); while(!q.empty()){ UndirectedGraphNode *n = q.front(); q.pop(); if(!m[n]) { UndirectedGraphNode *newnode = new UndirectedGraphNode(n->label); m[n] = newnode; } for(auto a : n->neighbors){ if(!m[a]) { UndirectedGraphNode *newa = new UndirectedGraphNode(a->label); m[a] = newa; q.push(a); } m[n]->neighbors.push_back(m[a]); } } return m[node]; }};
阅读全文
0 0
- (M)DFS:133. Clone Graph
- 133. Clone Graph(DFS)
- 133. Clone Graph :一个典型的DFS
- Clone Graph BFS & DFS
- [LeetCode] Clone Graph(!!!!graph&dfs&bfs)
- Leetcode 133. Clone Graph用BFS、DFS两种解法
- LeetCode 133. Clone Graph
- [Leetcode] 133. Clone Graph
- [leetcode] 133.Clone Graph
- 133. Clone Graph
- Leetcode 133. Clone Graph
- 133. Clone Graph LeetCode
- 133. Clone Graph
- LeetCode 133. Clone Graph
- leetcode 133. Clone Graph
- 133. Clone Graph
- 133. Clone Graph
- LeetCode *** 133. Clone Graph
- HBuilder在线打包iOS图文介绍
- VMware Fusion DHCP方式下如何指定虚拟机IP地址
- 通过ajax获取easydropdown数据
- linphone源码下载及下载失败解决方法
- 金山大数据技术总监教您如何零基础学习大数据
- (M)DFS:133. Clone Graph
- 无线轮播
- Unix/Linux编程-文件和目录(一)
- 为设备服务的文件系统sysfs--sysfs文件的读写
- js练手之下拉列表
- C语言动态内存学习笔记
- 一些SSH知识
- 一小时Docker教程
- Codeforces Round #441 div2 B. Divisiblity of Differences