原题目:https://leetcode-cn.com/problems/clone-graph/
思路:
BFS,因为是深拷贝,所以要使用new新建节点。
用v来存储新建过的节点,visited表示访问过(防止遍历无向图出现死循环)。
代码:
class Solution {
public:
Node* cloneGraph(Node* node) {
if(node==NULL) return NULL;
vector<Node*> v(101);//用来存储已经重新建立过的新节点。
Node* tmp;
queue<Node*> q;
q.push(node);
vector<int>visited(101,0);//存储访问过的状态
while(!q.empty()){
tmp = q.front();q.pop();
//获得节点的状态,没有建立过就新建,建立过就从v里面获取
Node* p1 = (visited[tmp->val] ? v[tmp->val] : new Node(tmp->val));
visited[p1->val] = 1;
v[p1->val] = p1;
for(Node* i:tmp->neighbors){
Node* p2=(visited[i->val] ? v[i->val] : new Node(i->val));
p1->neighbors.push_back(p2);//建立关系
if(visited[i->val]==0) q.push(i);//防止循环
v[p2->val] = p2;
visited[p2->val] = 1;
}
}
return v[node->val];
}
};