class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(node==NULL) return NULL;
map<UndirectedGraphNode*,UndirectedGraphNode*>copied;
queue<UndirectedGraphNode *>q;
q.push(node);
copied[node]=new UndirectedGraphNode(node->label);
while(!q.empty())
{
UndirectedGraphNode *cur=q.front();
q.pop();
for(int i=0;i<cur->neighbors.size();i++)
{
if(copied.find(cur->neighbors[i])!=copied.end())
copied[cur]->neighbors.push_back(copied[cur->neighbors[i]]); //copied[cur]
else
{
UndirectedGraphNode *newnode=new UndirectedGraphNode (cur->neighbors[i]->label);
copied[cur->neighbors[i]]=newnode;
copied[cur]->neighbors.push_back(newnode);
q.push(cur->neighbors[i]);
}
}
}
return copied[node];
}
};
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(node==NULL) return NULL;
map<UndirectedGraphNode*,UndirectedGraphNode*>copied;
queue<UndirectedGraphNode *>q;
q.push(node);
copied[node]=new UndirectedGraphNode(node->label);
while(!q.empty())
{
UndirectedGraphNode *cur=q.front();
q.pop();
for(int i=0;i<cur->neighbors.size();i++)
{
if(copied.find(cur->neighbors[i])!=copied.end())
copied[cur]->neighbors.push_back(copied[cur->neighbors[i]]); //copied[cur]
else
{
UndirectedGraphNode *newnode=new UndirectedGraphNode (cur->neighbors[i]->label);
copied[cur->neighbors[i]]=newnode;
copied[cur]->neighbors.push_back(newnode);
q.push(cur->neighbors[i]);
}
}
}
return copied[node];
}
};