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);
        }
    };
    

  • 相关阅读:
    MongoDB权限管理
    Termux结合公网kali打造移动渗透神器
    整人病毒vbs大全!
    mongodb 数据库详解
    mongodb 用户及数据库管理命令
    windows入侵排查思路
    linux 下node.js 安装
    Linux下如何用/proc命令查找进程状态信息——当前目录,内存占用,描述符等
    linux c 得到指定进程内存占用
    1分钟彻底理解C语言指针
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3938372.html
Copyright © 2011-2022 走看看