(68) 133. Cloner la carte (leetcode)

题目链接:
https://leetcode-cn.com/problems/clone-graph/
难度:中等
133. 克隆图
	给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
	图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
	class Node {
	    public int val;
	    public List<Node> neighbors;
	}

Le problème n'est pas difficile avant de faire des méthodes similaires exactement les mêmes. . .
Récursion

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> neighbors;
    
    Node() {
        val = 0;
        neighbors = vector<Node*>();
    }
    
    Node(int _val) {
        val = _val;
        neighbors = vector<Node*>();
    }
    
    Node(int _val, vector<Node*> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
};
*/

class Solution {
    
    
public:
    unordered_map<Node*,Node*> flag;
    //  一
    Node* cloneGraph(Node* node) {
    
    
        if(node==nullptr){
    
    
            return node;
        }
        if(flag.find(node)!=flag.end()){
    
    
            return flag[node];
        }
        Node* ans=new Node(node->val);
        flag[node]=ans;
        for(auto &nei:node->neighbors){
    
    
            ans->neighbors.emplace_back(cloneGraph(nei));
        }
        return ans;
    }
};
//  二
// 当然也可以将所有的node:newnode全部存在flag中
// 然后枚举建立关系
    void dfs(Node* node){
    
    
        flag[node]=new Node(node->val);
        for(auto nei:node->neighbors){
    
    
            if(flag.find(nei)==flag.end()){
    
    
                dfs(nei);
            }
        }
    }
    Node* cloneGraph(Node* node) {
    
    
        if(node==nullptr){
    
    
            return node;
        }
        dfs(node);
        for(auto [s , d] : flag){
    
    
            for(auto nei:s->neighbors){
    
    
                d->neighbors.push_back(flag[nei]);
            }
        }
        return flag[node];
    }

Il s'agit d'utiliser la file d'attente et non la récursivité (j'ai fait une erreur en l'écrivant, et j'ai vu la solution du problème suivant. Il n'est toujours pas compétent ... Ce mois-ci ce type de problème est estimé à beaucoup de pratique lente, je suis encore trop bon)

class Solution {
    
    
public:
    Node* cloneGraph(Node* node) {
    
    
        if(node==nullptr){
    
    
            return node;
        }
        
        unordered_map<Node*,Node*> flag;
        queue<Node*> que;

        flag[node]=new Node(node->val);
        que.emplace(node);

        while(!que.empty()){
    
    
            Node *cur=que.front();
            que.pop();
            for(auto &nei:cur->neighbors){
    
    
                Node *newnode;
                if(flag.find(nei)!=flag.end()){
    
    
                    newnode=flag[nei];
                }else{
    
    
                    newnode=new Node(nei->val);
                    flag[nei]=newnode;
                    que.emplace(nei);
                }
                flag[cur]->neighbors.emplace_back(newnode);
            }
        }
        return flag[node];
    }
};

Je suppose que tu aimes

Origine blog.csdn.net/li_qw_er/article/details/107947303
conseillé
Classement