zoukankan      html  css  js  c++  java
  • LeetCode: Clone Graph

    LeetCode: 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
             / 
             \_/
    
    地址:https://oj.leetcode.com/problems/clone-graph/
    算法:把整个图复制下来,基本就是利用map来完成的,复制的过程采用递归完成。代码:
     1 /**
     2  * Definition for undirected graph.
     3  * struct UndirectedGraphNode {
     4  *     int label;
     5  *     vector<UndirectedGraphNode *> neighbors;
     6  *     UndirectedGraphNode(int x) : label(x) {};
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
    12         if(!node){
    13             return NULL;
    14         }
    15         map<int,UndirectedGraphNode *> hash_table;
    16         set<int> isTraved;
    17         return subClone(node,hash_table,isTraved);
    18     }
    19     UndirectedGraphNode *subClone(UndirectedGraphNode *node, map<int,UndirectedGraphNode*> &hash_table, set<int> &isTraved){
    20         if(!node){
    21             return NULL;
    22         }
    23         int label = node->label;
    24         if(isTraved.find(label) != isTraved.end()){
    25             return hash_table[label];
    26         }
    27         if(hash_table.find(label) == hash_table.end()){
    28             hash_table[label] = new UndirectedGraphNode(label);
    29         }
    30         isTraved.insert(label);
    31         UndirectedGraphNode *p = hash_table[label];
    32         vector<UndirectedGraphNode *>::iterator it = node->neighbors.begin();
    33         for(; it != node->neighbors.end(); ++it){
    34             p->neighbors.push_back(subClone(*it,hash_table,isTraved));
    35         }
    36         return p;
    37     }
    38 };

     

  • 相关阅读:
    第三方模块加载时出现XXX运行 提示错误:无法加载文件 C:UsersgxfAppDataRoaming pmXXX.ps1,因为在此系统上禁止运行脚本。
    node模块化
    前端面试集锦
    将字符转换成驼峰表示法
    JavaScript数据处理
    大数据基础整合
    移动端网页特效
    本地存储
    DOM重点核心
    触发器SQL
  • 原文地址:https://www.cnblogs.com/boostable/p/leetcode_clone_graph.html
Copyright © 2011-2022 走看看