/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector<UndirectedGraphNode *> neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
class Solution {
public:
map<UndirectedGraphNode*, UndirectedGraphNode*> m;
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if (node == NULL) return NULL;
if (m.find(node) != m.end()) return m[node];
UndirectedGraphNode *newOne = new UndirectedGraphNode(node->label);
m[node] = newOne;
for(int st = 0; st < node->neighbors.size(); st++) {
UndirectedGraphNode *tmp = cloneGraph(node->neighbors[st]);
if (tmp != NULL) {
newOne->neighbors.push_back(tmp);
}
}
return newOne;
}
};