【leetcode】Clone Graph

來源:互聯網
上載者:User

標籤:des   style   blog   color   strong   art   

Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.


OJ‘s undirected graph serialization:

Nodes are labeled uniquely.

We use  # as a separator for each node, and  , as a separator for node label and each neighbor of the node.

 

As an example, consider the serialized graph {0,1,2#1,2#2,2}.

The graph has a total of three nodes, and therefore contains three parts as separated by #.

  1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
  2. Second node is labeled as 1. Connect node 1 to node 2.
  3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.

 

Visually, the graph looks like the following:

       1      /      /       0 --- 2         /          \_/

題解:利用DFS遞迴的方法複製圖,用hashmap儲存原圖中的節點和新圖中的節點的對應關係。而且利用這個hashmap可以在O(1)的時間內判斷一個節點是否被複製過,並且知道複製它得到的新節點。

實現一個複製節點的方法,在這個方法中:

  1. 判斷這個節點是否被clone過了,如果是,返回它對應的clone節點;
  2. 如果沒有被clone過,那麼建立節點為該節點的clone節點,並且遞迴的clone它的鄰居節點,放入該節點的neighbors列表裡面;

代碼如下:

 1 /** 2  * Definition for undirected graph. 3  * class UndirectedGraphNode { 4  *     int label; 5  *     List<UndirectedGraphNode> neighbors; 6  *     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); } 7  * }; 8  */ 9 public class Solution {10     private HashMap<UndirectedGraphNode,UndirectedGraphNode> mapClone = new HashMap<UndirectedGraphNode,UndirectedGraphNode>();11     12     private UndirectedGraphNode cloneNode(UndirectedGraphNode node){13         if(node == null)14             return null;15         //if this node already has a clone16         if(mapClone.containsKey(node))17             return mapClone.get(node);18         19         //if this node hasn‘t been cloned, we construct a new node copy20         UndirectedGraphNode copy = new UndirectedGraphNode(node.label);21         mapClone.put(node, copy);22         23         //clone all the neighbers of node24         for(UndirectedGraphNode n:node.neighbors){25             copy.neighbors.add(cloneNode(n));26         }27         return copy;28     }29     public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {30         return cloneNode(node);31     }32 }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.