其他分享
首页 > 其他分享> > 克隆图-133

克隆图-133

作者:互联网

克隆图

题目:克隆图

    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

    图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。

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


输入:[[2,4],[1,3],[2,4],[1,3]]

输出:[[2,4],[1,3],[2,4],[1,3]]

 

题解:

1. 两遍BFS

/**
     * 第一遍BFS:复制所有点
     * 第二遍BFS:复制所有邻居
     */
    class Solution {
        public Node cloneGraph(Node node) {
            if(null == node) return null;

            Map<Node, Node> map=new HashMap();
            Queue<Node> queue =new ArrayDeque<>();
            queue.add(node);

            Node temp=null;
            while (!queue.isEmpty())
            {
                temp=queue.poll();
                Node cv=new Node(temp.val);
                map.put(temp, cv);

                for(Node neighber : temp.neighbors)
                {
                    if(map.containsKey(neighber))
                        continue;
                    queue.add(neighber);
                }
            }

            queue.add(node);
            int book[]=new int[101];
            book[node.val]=1;
            Node cv=null;
            while (!queue.isEmpty())
            {
                temp=queue.poll();
                cv=map.get(temp);
                for(Node neighbor : temp.neighbors)
                {
                    cv.neighbors.add(map.get(neighbor));
                    if(book[neighbor.val]==1)
                        continue;
                    book[neighbor.val]=1;
                    queue.add(neighbor);
                }
            }
            return map.get(node);
        }
    }

标签:Node,queue,node,克隆,temp,map,133,val
来源: https://www.cnblogs.com/greengages/p/15701846.html