克隆圖記住:一個map一個queue,照葫蘆畫瓢BFSnode
找到一個節點就畫一個對應的新的,用map對應,而後添加鄰居,記錄鄰居到queuespa
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node==null) return node; UndirectedGraphNode res = new UndirectedGraphNode(node.label); Queue<UndirectedGraphNode> queue = new LinkedList<>(); Map<UndirectedGraphNode,UndirectedGraphNode> map = new HashMap<>(); queue.offer(node); map.put(node,res); while (!queue.isEmpty()){ UndirectedGraphNode cur = queue.poll(); List<UndirectedGraphNode> neighbors = cur.neighbors; for (UndirectedGraphNode neighbor : neighbors) { if (!map.containsKey(neighbor)){ UndirectedGraphNode newNode = new UndirectedGraphNode(neighbor.label); queue.offer(neighbor); //在舊圖中每遍歷到一個節點,就在map中給新圖申請一個對應的內存 map.put(neighbor,newNode); } //根據舊圖中的位置爲新圖添加鄰居 map.get(cur).neighbors.add(map.get(neighbor)); } } return res; }