s4553711
6/27/2017 - 2:35 PM

133.cpp

/**
 * 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;
    }
};