1. 程式人生 > 其它 >克隆圖-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);
        }
    }