leetcode Clone Graph
Clone Graph
Total Accepted: 2649
Total Submissions: 14045 My Submissions
Clone an undirected graph. Each node in the graph contains a
OJ's undirected graph serialization:
Nodes are labeled uniquely. We use
As an example, consider the serialized graph
The graph has a total of three nodes, and therefore contains three parts as separated by First node is labeled as Second node is labeled as Third node is labeled as
Visually, the graph looks like the following:
DFS is OK, TAKE NOTICE the position of
The following is the AC code:
Total Accepted: 2649
Total Submissions: 14045 My Submissions
Clone an undirected graph. Each node in the graph contains a
label
and a list of its neighbors
. 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
#
. 0
. Connect node 0
to both nodes 1
and 2
. 1
. Connect node 1
to node 2
. 2
. Connect node 2
to node 2
(itself), thus forming a self-cycle. Visually, the graph looks like the following:
1
/ \
/ \
0 --- 2
/ \
\_/
DFS is OK, TAKE NOTICE the position of
exist.insert(make_pair(node, nodecpy));
The following is the AC code:
/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
class Solution {
public:
UndirectedGraphNode *DFS(UndirectedGraphNode *node, unordered_map& exist) {
if (exist.find(node) != exist.end())
return exist[node];
else {
UndirectedGraphNode *nodecpy = new UndirectedGraphNode(node->label);
exist.insert(make_pair(node, nodecpy));
UndirectedGraphNode *neighbor = NULL;
for (int i = 0; i < (node->neighbors).size(); ++i) {
neighbor = DFS((node->neighbors)[i], exist);
(nodecpy->neighbors).push_back(neighbor);
}
return nodecpy;
}
}
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
unordered_map exist;
if (node == NULL)
return node;
return DFS(node,exist);
}
};