zoukankan      html  css  js  c++  java
  • 21. Clone Graph

    Clone Graph

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.

    OJ's undirected graph serialization:

    Nodes are labeled uniquely.

    We use # as a separator for each node, and , as a separator for node label and each neighbor of the node.

    As an example, consider the serialized graph {0,1,2#1,2#2,2}.

    The graph has a total of three nodes, and therefore contains three parts as separated by #.

    1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
    2. Second node is labeled as 1. Connect node 1 to node 2.
    3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.

    Visually, the graph looks like the following:

           1
          / 
         /   
        0 --- 2
             / 
             \_/

    思想: 简单纯粹的深度优先搜索。
    /**
     * Definition for undirected graph.
     * struct UndirectedGraphNode {
     *     int label;
     *     vector<UndirectedGraphNode *> neighbors;
     *     UndirectedGraphNode(int x) : label(x) {};
     * };
     */
     typedef UndirectedGraphNode NODE;
     typedef pair<NODE*, NODE*> PAIR;
     NODE* dfs(NODE *node, unordered_map<NODE*, NODE*> &_map) {
         if(_map.count(node)) return _map[node];
         NODE *p = new NODE(node->label);
         _map.insert(PAIR(node, p));
         for(size_t i = 0; i < node->neighbors.size(); ++i) {
             p->neighbors.push_back(dfs(node->neighbors[i], _map));
         }
         return p;
     }
     
    class Solution {
    public:
        UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
            unordered_map<NODE*, NODE*> _map;
            _map[NULL] = NULL;
            return dfs(node, _map);
        }
    };
    

  • 相关阅读:
    .NetCore(四) 在Nginx部署
    .Net Core(三)MVC Core
    .Net Core(二)EFCore
    .Net Core(一)环境搭建与基本使用
    Linux初体验
    Angular基础(八) Observable & RxJS
    Angular基础(七) HTTP & Routing
    Angular基础(六) DI
    Angular基础(五) 内建指令和表单
    Angular基础(四) 创建Angular应用
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3938372.html
Copyright © 2011-2022 走看看