思路: 刚开始用一个DFS方法,不过这题目最好用BFS方法,这篇博客介绍的思路不错,而且代码精简,套用这个模式的code如下:
class Solution {
unordered_map<int, UndirectedGraphNode*> m; // m 存储新图中的节点label 和 指针位置
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(node == NULL)
return node;
queue<UndirectedGraphNode *> Q;
Q.push(node);
while(!Q.empty()){
UndirectedGraphNode * qFront = Q.front();
Q.pop();
if(m.find(qFront->label) == m.end())
m[qFront->label] = new UndirectedGraphNode(qFront->label);
for(int i = 0;i < (qFront->neighbors).size();i++){
if(m.find((qFront->neighbors)[i]->label) == m.end()){// 作为是否已经添加过的标记
m[(qFront->neighbors)[i]->label] = new UndirectedGraphNode((qFront->neighbors)[i]->label);
Q.push((qFront->neighbors)[i]);
}
m[qFront->label]->neighbors.push_back(m[qFront->neighbors[i]->label]);
}
}
return m[node->label];
}
};