https://oj.leetcode.com/problems/clone-graph/
克隆一个可能有环的无向图。递归的重构出每个顶点即可。虽然有环,但是每个结点的label提供了该结点的唯一标示。可以使用一个map记录该标识下结点的地址。
/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector<UndirectedGraphNode *> neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
typedef UndirectedGraphNode scnode;
class Solution {
public:
map<int,scnode *> cm;
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if (node==NULL) return NULL;
int cl=node->label;
if (cm.find(cl)!=cm.end()) return cm[cl];
scnode *cur=new scnode(cl);
cm[cl]=cur;
vector <scnode *> &neis=node->neighbors;
for (int i=0;i<neis.size();i++){
scnode *p=neis[i];
cur->neighbors.push_back(cloneGraph(p));
}
return cur;
}
};