原始思路:
首先做一次BFS遍历,将所有结点创建出来。
第二次遍历的时候可以快速地找出结点并构造图的关系。
为了
快速地找出结点可以使用map
tips:Nodes are labeled uniquely.看到这句话就该想到map了。。
实际做法:
BFS遍历同时就可以构造图的关系了
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(node==NULL)return NULL;
UndirectedGraphNode *h,*p,*q;
queue<UndirectedGraphNode*> queue;
map<int,UndirectedGraphNode*> mp;
h=new UndirectedGraphNode(node->label);
mp[node->label]=h;
queue.push(node);
while(!queue.empty()){
p=queue.front();
queue.pop();
vector<UndirectedGraphNode*> vec=p->neighbors,vec1;
for(int i=0;i<vec.size();i++)
{
if(vec[i]->label!=p->label&&mp[vec[i]->label]==NULL)
{
q=new UndirectedGraphNode(vec[i]->label);
mp[vec[i]->label]=q;
vec1.push_back(q);
queue.push(vec[i]);
}
else
vec1.push_back(mp[vec[i]->label]);
}
mp[p->label]->neighbors=vec1;
}
return h;
}