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
#
.- 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 / \ \_/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Definition for undirected graph. | |
* struct UndirectedGraphNode { | |
* int label; | |
* vector<UndirectedGraphNode *> neighbors; | |
* UndirectedGraphNode(int x) : label(x) {}; | |
* }; | |
*/ | |
class Solution { | |
public: | |
unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> hash; | |
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { | |
if (!node) return node; | |
if(hash.find(node) == hash.end()) { | |
hash[node] = new UndirectedGraphNode(node -> label); | |
for (auto x : node -> neighbors) { | |
(hash[node] -> neighbors).push_back( cloneGraph(x) ); | |
} | |
} | |
return hash[node]; | |
} | |
}; |
No comments:
Post a Comment