//用BFS遍历图所有结点,使用unordered_map结果存储已经构造的结点,queue存放还没有访问的结点。
/*
* 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==nullptr)return nullptr;
unordered_map<int,UndirectedGraphNode*> map;
queue<UndirectedGraphNode*> queue;
UndirectedGraphNode* node_cloned = new UndirectedGraphNode(node->label);
queue.push(node);
pair<int,UndirectedGraphNode*> tmp(node->label,node_cloned);
map.insert(tmp);
while(!queue.empty()){
auto node_tmp = queue.front();
queue.pop();
auto node_clone_tmp = map[node_tmp->label];
for(int i=0;i<node_tmp->neighbors.size();i++){
auto neighbor = node_tmp->neighbors[i];
if(map.find(neighbor->label)!=map.end()){
node_clone_tmp->neighbors.push_back(map[neighbor->label]);
continue;
}
queue.push(neighbor);
auto newnode = new UndirectedGraphNode(neighbor->label);
map.insert(pair<int,UndirectedGraphNode*>(neighbor->label,newnode));
node_clone_tmp->neighbors.push_back(newnode);
}
}
return node_cloned;
}
};