这个题和之前的链表随机指针复制有些类似,所以只能用深度或者广度搜索,因为必须后面的节点出现了,
才能构造前面节点的邻接点的集合,具体的看代码:
class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
unordered_map<int,UndirectedGraphNode *> vertexs;
if(node==NULL)
return NULL;
return Clonegraph(node,vertexs);
}
UndirectedGraphNode *Clonegraph(UndirectedGraphNode *node,unordered_map<int,UndirectedGraphNode*> &vertexs){
if(vertexs.find(node->label)!=vertexs.end())
return vertexs[node->label];
UndirectedGraphNode *tem=new UndirectedGraphNode(node->label);
vertexs.insert(make_pair(node->label,tem));
for(int i=0;i<node->neighbors.size();i++){
tem->neighbors.push_back(Clonegraph(node->neighbors[i],vertexs));
}
return tem;
}
};