zoukankan      html  css  js  c++  java
  • 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
             / 
             \_/

    class Solution {
    public:
        void Sub(map<UndirectedGraphNode*,UndirectedGraphNode*>& se,UndirectedGraphNode** nnode,UndirectedGraphNode*node){
                (*nnode)=new UndirectedGraphNode(node->label);
                se[node]=(*nnode);
                for(int i=0;i<node->neighbors.size();i++){
                    if(se.find(node->neighbors[i])==se.end()){
                        UndirectedGraphNode * n;
                        Sub(se,&n,node->neighbors[i]);
                        (*nnode)->neighbors.push_back(n);
                    }
                    else{
                        (*nnode)->neighbors.push_back(se[node->neighbors[i]]);
                    }
                }
        }
        UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
            // Note: The Solution object is instantiated only once and is reused by each test case.
            if(node==NULL)return NULL;
            UndirectedGraphNode * ret=NULL;
            map<UndirectedGraphNode *,UndirectedGraphNode*>se;
            Sub(se,&ret,node);
            return ret;
        }
    };
    View Code
  • 相关阅读:
    全站导航
    常用模块
    模块的引用的路径的查找
    类的魔术方法
    包装和授权
    类内置的attr属性
    反射
    三大特性之多态
    三大特性之封装
    python应用:爬虫框架Scrapy系统学习第二篇——windows下安装scrapy
  • 原文地址:https://www.cnblogs.com/superzrx/p/3349859.html
Copyright © 2011-2022 走看看