/**
* 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;
}
map<UndirectedGraphNode*, UndirectedGraphNode*> mp;
queue<UndirectedGraphNode*> q;
mp[node] = new UndirectedGraphNode(node->label);
q.push(node);
while (!q.empty()) {
UndirectedGraphNode *cp = q.front();
UndirectedGraphNode *np = mp[cp];
q.pop();
for (int i = 0; i < cp->neighbors.size(); ++i) {
UndirectedGraphNode *tp = cp->neighbors[i];
if (mp.find(tp) == mp.end()) {
mp[tp] = new UndirectedGraphNode(tp->label);
q.push(tp);
}
np->neighbors.push_back(mp[tp]);
}
}
return mp[node];
}
};