133. Clone Graph
来源:互联网 发布:mac奶瓶粉底液 编辑:程序博客网 时间:2024/06/09 18:28
题目:
Clone an undirected graph. Each node in the graph contains a label
and a list of itsneighbors
.
OJ's undirected graph serialization:
Nodes are labeled uniquely.
We use#
as a separator for each node, and ,
as a separator for node label and each neighbor of the node.As an example, consider the serialized graph {0,1,2#1,2#2,2}
.
The graph has a total of three nodes, and therefore contains three parts as separated by#
.
- First node is labeled as
0
. Connect node0
to both nodes1
and2
. - Second node is labeled as
1
. Connect node1
to node2
. - Third node is labeled as
2
. Connect node2
to node2
(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/
题解:
这道题解法并不唯一,有BFS,DFS等解法。以下主要讲的是BFS 的解法。为了clone无向图,我们必须每个点都要复制,每个点只能遍历一次,需要判断点是否被重复访问。队列q用于记录BFS遍历的层次信息。
/** * 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 == NULL) return NULL; queue<UndirectedGraphNode*> q; map<UndirectedGraphNode*, UndirectedGraphNode*> m; UndirectedGraphNode *nodeCopy = new UndirectedGraphNode(node->label); q.push(node); m[node] = nodeCopy; while(!q.empty()) { UndirectedGraphNode* d = q.front(); q.pop(); for(auto neighbor: d->neighbors) { if(m.find(neighbor)==m.end()) { auto copy = new UndirectedGraphNode(neighbor->label); m[neighbor] = copy; q.push(neighbor); } m[d]->neighbors.push_back(m[neighbor]); } } return nodeCopy; }};end!
0 0
- 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
- leetcode-133. Clone Graph
- LeetCode 133. Clone Graph
- 133. Clone Graph
- 133. Clone Graph
- 133. Clone Graph
- 133. Clone Graph
- 一站式学习Wireshark(十):应用Wireshark显示过滤器分析特定数据流(下)
- 优先队列
- 求职有用博客地址
- Atitit 数据库 标准库 sdk 函数库 编程语言 mysql oracle attilax总结
- 一种高效率的笔记法——康奈尔笔记法
- 133. Clone Graph
- MemoryModule阅读与PE文件解析(四)---深入理解TLS
- JSON语法规则
- 编程有用博客地址
- 算法导论 练习题 6.1-2
- intellij idea maven springMVC和SpringBoot遇到的两个小问题
- 冒泡!!
- 附属美丽
- bootstarp 模态框居中