递归构图,注意不要重复创建节点
/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector<UndirectedGraphNode *> neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
class Solution {
public:
map<int,UndirectedGraphNode*> A;
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(!node) return NULL;
UndirectedGraphNode *p=new UndirectedGraphNode(node->label);
A[node->label]=p;
for(auto &x:node->neighbors)
if(!A.count(x->label)) p->neighbors.push_back(cloneGraph(x));
else p->neighbors.push_back(A[x->label]);
return p;
}
};