复制图
分别使用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; };