LeetCode 133 Clone Graph
题目的意思是,给你一个图,你给他返回一个复制的图。
所有的节点你都需要自己New 而不能用他给的参数赋值,因为那是个指针。
每个节点的label都是唯一的,由于存在环,防止无限递归,可以用map将创建的节点存起来。
c++
class Solution {
public:
UndirectedGraphNode* ans;
map<int,UndirectedGraphNode*> vis;
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(node==NULL)
return ans;
ans = new UndirectedGraphNode(node->label);
vis[ans->label] = ans;
dfs(node,ans);
return ans;
}
void dfs(UndirectedGraphNode *node,UndirectedGraphNode *ans)
{
int l=node->neighbors.size();
for(int i=0;i<l;i++)
{
if(vis[node->neighbors[i]->label]==NULL)
{
vis[node->neighbors[i]->label] = new UndirectedGraphNode(node->neighbors[i]->label);
ans->neighbors.push_back( vis[node->neighbors[i]->label]);
dfs(node->neighbors[i],ans->neighbors[i]);
}
else
ans->neighbors.push_back(vis[node->neighbors[i]->label]);
}
}
};