Leetcode 133.克隆圖
阿新 • • 發佈:2018-12-27
克隆圖
克隆一張無向圖,圖中的每個節點包含一個 label (標籤)和一個 neighbors (鄰接點)列表 。
OJ的無向圖序列化:
節點被唯一標記。
我們用 # 作為每個節點的分隔符,用 , 作為節點標籤和鄰接點的分隔符。
例如,序列化無向圖 {0,1,2#1,2#2,2}。
該圖總共有三個節點, 被兩個分隔符 # 分為三部分。
- 第一個節點的標籤為 0,存在從節點 0 到節點 1 和節點 2 的兩條邊。
- 第二個節點的標籤為 1,存在從節點 1 到節點 2 的一條邊。
- 第三個節點的標籤為 2,存在從節點 2 到節點 2 (本身) 的一條邊,從而形成自環。
我們將圖形視覺化如下:
1
/ \
/ \
0 --- 2
/ \
\_/
1 public class Solution { 2 public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { 3 if(node==null) 4 return null; 5 Queue<UndirectedGraphNode> q=newLinkedList<UndirectedGraphNode>(); 6 HashMap<UndirectedGraphNode,UndirectedGraphNode> hash=new HashMap<UndirectedGraphNode,UndirectedGraphNode>(); 7 UndirectedGraphNode graph=new UndirectedGraphNode(node.label); 8 q.add(node); 9 hash.put(node,graph);10 while(!q.isEmpty()){ 11 UndirectedGraphNode curNode=q.poll(); 12 List<UndirectedGraphNode> currNeighbos=curNode.neighbors; 13 for(UndirectedGraphNode myNode: currNeighbos){ 14 if(!hash.containsKey(myNode)){ 15 UndirectedGraphNode copy=new UndirectedGraphNode(myNode.label); 16 hash.put(myNode,copy); 17 hash.get(curNode).neighbors.add(copy); 18 q.add(myNode); 19 }else{ 20 hash.get(curNode).neighbors.add(hash.get(myNode)); 21 } 22 } 23 } 24 return graph; 25 } 26 27 }