zoukankan      html  css  js  c++  java
  • 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
             / 
             \_/
    思路:
    思路类似上题,用一个map来保存新旧graph节点的对应关系
    代码:
     1     UndirectedGraphNode *clone(UndirectedGraphNode *node, map<int,UndirectedGraphNode*> &table)
     2     {
     3         if(node==NULL)
     4             return NULL;
     5             
     6         if(table.find(node->label)!=table.end())
     7             return table[node->label];
     8         
     9         UndirectedGraphNode *newnode=new UndirectedGraphNode(node->label);
    10         table[newnode->label]=newnode;
    11 
    12         for(int i=0;i<node->neighbors.size();i++)
    13         {
    14             UndirectedGraphNode *neighbor=clone(node->neighbors[i],table);
    15             newnode->neighbors.push_back(neighbor);
    16         }
    17         
    18         return newnode;
    19     }
    20 
    21     UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
    22         // Note: The Solution object is instantiated only once and is reused by each test case.
    23         //keep a hash table to check whether this node is visited or not
    24         map<int,UndirectedGraphNode*> visitTable;
    25         return clone(node,visitTable);
    26     }
  • 相关阅读:
    Mac下配置Android adb环境变量
    在远程Linux上搭建jenkins
    早期渲染模板-Thymeleaf总结
    启动SpringBoot时的banner自定义修改
    MySQL密码策略及修改或忘记密码
    (转)Maven使用总结
    转-安全层开发—Shiro对比Spring Security
    JavaWeb应用-发布打成jar包和war包区别
    Gitea中常规git工作流程
    简述JSP与Servlet的区别及联系
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3407231.html
Copyright © 2011-2022 走看看