zoukankan      html  css  js  c++  java
  • [LeetCode] 133. 克隆图

    题目链接 : https://leetcode-cn.com/problems/clone-graph/

    题目描述:

    给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 valInt) 和其邻居的列表(list[Node])。

    示例:

    输入:
    {"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","neighbors":[{"$ref":"3"},{"$ref":"1"}],"val":4}],"val":3}],"val":2},{"$ref":"4"}],"val":1}
    
    解释:
    节点 1 的值是 1,它有两个邻居:节点 2 和 4 。
    节点 2 的值是 2,它有两个邻居:节点 1 和 3 。
    节点 3 的值是 3,它有两个邻居:节点 2 和 4 。
    节点 4 的值是 4,它有两个邻居:节点 1 和 3 。
    

    提示:

    • 节点数介于 1 到 100 之间。
    • 无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
    • 由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
    • 必须将给定节点的拷贝作为对克隆图的引用返回。

    思路:

    这道题就是遍历整个图,所以遍历时候要记录已经访问点, 我们用一个字典记录

    所以,遍历方法就有两种

    思路一:DFS(深度遍历)

    思路二:BFS(广度遍历)

    代码:

    思路一:

    class Solution:
        def cloneGraph(self, node: 'Node') -> 'Node':
            lookup = {}
    
            def dfs(node):
                #print(node.val)
                if not node: return
                if node in lookup:
                    return lookup[node]
                clone = Node(node.val, [])
                lookup[node] = clone
                for n in node.neighbors:
                    clone.neighbors.append(dfs(n))
                
                return clone
    
            return dfs(node)
    

    java

    class Solution {
        public Node cloneGraph(Node node) {
            Map<Node, Node> lookup = new HashMap<>();
            return dfs(node, lookup);
        }
    
        private Node dfs(Node node, Map<Node,Node> lookup) {
            if (node == null) return null;
            if (lookup.containsKey(node)) return lookup.get(node);
            Node clone = new Node(node.val, new ArrayList<>());
            lookup.put(node, clone);
            for (Node n : node.neighbors)clone.neighbors.add(dfs(n,lookup));
            return clone;
        }
    }
    

    思路二:

    """
    # Definition for a Node.
    class Node:
        def __init__(self, val, neighbors):
            self.val = val
            self.neighbors = neighbors
    """
    class Solution:
        def cloneGraph(self, node: 'Node') -> 'Node':
            from collections import deque
            lookup = {}
    
            def bfs(node):
                if not node: return
                clone = Node(node.val, [])
                lookup[node] = clone
                queue = deque()
                queue.appendleft(node)
                while queue:
                    tmp = queue.pop()
                    for n in tmp.neighbors:
                        if n not in lookup:
                            lookup[n] = Node(n.val, [])
                            queue.appendleft(n)
                        lookup[tmp].neighbors.append(lookup[n])
                return clone
    
            return bfs(node)
    

    java

    class Solution {
        public Node cloneGraph(Node node) {
            if (node == null) return null;
            Map<Node, Node> lookup = new HashMap<>();
            Node clone = new Node(node.val, new ArrayList<>());
            lookup.put(node, clone);
            Deque<Node> queue = new LinkedList<>();
            queue.offer(node);
            while (!queue.isEmpty()) {
                Node tmp = queue.poll();
                for (Node n : tmp.neighbors) {
                    if (!lookup.containsKey(n)) {
                        lookup.put(n, new Node(n.val, new ArrayList<>()));
                        queue.offer(n);
                    }
                    lookup.get(tmp).neighbors.add(lookup.get(n));
                }
            }
            return clone;
        }
    }
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/clone-graph
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 相关阅读:
    window下配置ssh key
    Mysqldump记录
    WordPress插件入口菜单创建的位置代码
    阿里大鱼发送短信使用记录
    SpringMVC–SSH -- RESTful -- JSR303
    Spring MVC程序中得到静态资源文件css,js,图片
    包机项目源码分析笔记
    myeclipse中java文件头注释格式设置
    oracle扩展dblink数。
    linux--解决oracle sqlplus 中上下左右backspace不能用
  • 原文地址:https://www.cnblogs.com/powercai/p/11202984.html
Copyright © 2011-2022 走看看