克隆图-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]]

克隆图-133

 

题解:

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);
        }
    }
上一篇:【单调队列优化DP】luogu_P2569 [SCOI2010]股票交易


下一篇:开放中国农业-国际农民丰收节贸易会:谋定全球共同发展