zoukankan      html  css  js  c++  java
  • 133. Clone Graph

    Given a reference of a node in a connected undirected graph.

    Return a deep copy (clone) of the graph.

    Each node in the graph contains a val (int) and a list (List[Node]) of its neighbors.

    class Node {
        public int val;
        public List<Node> neighbors;
    }
    

    Test case format:

    For simplicity sake, each node's value is the same as the node's index (1-indexed). For example, the first node with val = 1, the second node with val = 2, and so on. The graph is represented in the test case using an adjacency list.

    Adjacency list is a collection of unordered lists used to represent a finite graph. Each list describes the set of neighbors of a node in the graph.

    The given node will always be the first node with val = 1. You must return the copy of the given node as a reference to the cloned graph.

    Example 1:

    Input: adjList = [[2,4],[1,3],[2,4],[1,3]]
    Output: [[2,4],[1,3],[2,4],[1,3]]
    Explanation: There are 4 nodes in the graph.
    1st node (val = 1)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
    2nd node (val = 2)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
    3rd node (val = 3)'s neighbors are 2nd node (val = 2) and 4th node (val = 4).
    4th node (val = 4)'s neighbors are 1st node (val = 1) and 3rd node (val = 3).
    

    Example 2:

    Input: adjList = [[]]
    Output: [[]]
    Explanation: Note that the input contains one empty list. The graph consists of only one node with val = 1 and it does not have any neighbors.
    

    Example 3:

    Input: adjList = []
    Output: []
    Explanation: This an empty graph, it does not have any nodes.
    

    Example 4:

    Input: adjList = [[2],[1]]
    Output: [[2],[1]]
    

    Constraints:

    • 1 <= Node.val <= 100
    • Node.val is unique for each node.
    • Number of Nodes will not exceed 100.
    • There is no repeated edges and no self-loops in the graph.
    • The Graph is connected and all nodes can be visited starting from the given node.

    M1: BFS, time: O(V + E), space: O(V)

    class Solution {
        public Node cloneGraph(Node node) {
            if(node == null) {
                return node;
            }
            Map<Node, Node> map = new HashMap<>();
            map.put(node, new Node(node.val, new ArrayList<>()));
            Queue<Node> q = new LinkedList<>();
            q.offer(node);
            
            while(!q.isEmpty()) {
                Node cur = q.poll();
                for(Node nei : cur.neighbors) {
                    if(!map.containsKey(nei)) {
                        map.put(nei, new Node(nei.val, new ArrayList<>()));
                        q.offer(nei);
                    }
                    map.get(cur).neighbors.add(map.get(nei));
                }
            }
            return map.get(node);
        }
    }

    M2: DFS, time: O(V + E), space: O(V)

    class Solution {
        Map<Node, Node> map = new HashMap<>();
        
        public Node cloneGraph(Node node) {
            return clone(node);
        }
        
        public Node clone(Node node) {
            if(node == null) {
                return null;
            }
            if(map.containsKey(node)) {
                return map.get(node);
            }
            Node newNode = new Node(node.val, new ArrayList<>());
            map.put(node, newNode);
            for(Node nei : node.neighbors) {
                newNode.neighbors.add(clone(nei));
            }
            return newNode;
        }
    }
  • 相关阅读:
    animation
    0201 ---背景 tableview
    0129 ---稳定定的 plist介绍
    0127 userdefault
    0127 数据库 我的专家
    0122 ---清理缓存
    0122 清楚缓存
    0122---screach
    0121 --view 可以当作线
    0119吧 iPhone 屏幕尺寸
  • 原文地址:https://www.cnblogs.com/fatttcat/p/13896288.html
Copyright © 2011-2022 走看看