[LeetCode]133. Clone Graph

复制图

分别使用bfs和dfs

1: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) return NULL;
        unordered_map<UndirectedGraphNode*,UndirectedGraphNode*> mp;
        queue<UndirectedGraphNode*> toVisit;
        
        UndirectedGraphNode* copy = new UndirectedGraphNode(node->label);
        mp[node]=copy;
        toVisit.push(node);
        while(!toVisit.empty()){
            UndirectedGraphNode* cur = toVisit.front();
            toVisit.pop();
            for(UndirectedGraphNode* neigh:cur->neighbors){
                if(mp.find(neigh)==mp.end()){
                    UndirectedGraphNode* neigh_copy = new UndirectedGraphNode(neigh->label);
                    mp[neigh]=neigh_copy;
                    toVisit.push(neigh);
                }
                mp[cur]->neighbors.push_back(mp[neigh]);
            }
        }
        return copy;
    }

    
};

2、dfs

class Solution {
public:
    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
        if (!node) return NULL;
        if (mp.find(node) == mp.end()) {
            mp[node] = new UndirectedGraphNode(node -> label);
            for (UndirectedGraphNode* neigh : node -> neighbors)
                mp[node] -> neighbors.push_back(cloneGraph(neigh));
        }
        return mp[node];
    } 
private:
    unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> mp;
};