LeetCode 133 Clone Graph

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]);
            
        }
    }
    
    
};
原文地址:https://www.cnblogs.com/dacc123/p/9939482.html