zoukankan      html  css  js  c++  java
  • [LeetCode]: 133: 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
             / 
             \_/
    

    题目分析:

    题目本身就是个图的遍历问题,其实只用看最上面的一句就OK了。下面整这么一篇就是为了说明Testcase,结果误导对了我好久。

    与树的遍历不同之处就是图可能会出现"闭合的环"这样会造成无线循环,所以遍历的时候需要把已经遍历过的点去掉。

    根据题目,图中每一个点的权值是不一样的,所以可以采用取巧的方法检测这个点是否已经加在了图中,即使用HashMap

    思路一:深度优先搜索

        public static UndirectedGraphNode cloneDFS(UndirectedGraphNode node,HashMap<Integer, UndirectedGraphNode> validator){
            if(validator.containsKey(node.label)){
                return validator.get(node.label);
            }
            
            UndirectedGraphNode nodeTemp = new UndirectedGraphNode(node.label);
            validator.put(node.label, nodeTemp);
            
            for(int i =0;i<node.neighbors.size();i++){
                nodeTemp.neighbors.add(cloneDFS(node.neighbors.get(i),validator));
            }
            
            return nodeTemp;
        }
        public static UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
            if(node== null ||  node.equals(null)){
                return null;
            }
            
            HashMap<Integer, UndirectedGraphNode> validator = new HashMap<Integer, UndirectedGraphNode>();
            return cloneDFS(node, validator);
        }

    思路二:广度优先搜索

    XXX

     
     
  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/savageclc26/p/4884900.html
Copyright © 2011-2022 走看看