public UndirectedGraphNode (UndirectedGraphNode node){ if (node == null) return node; HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>(); Queue<UndirectedGraphNode> q = new LinkedList<UndirectedGraphNode>(); map.put(node, new UndirectedGraphNode(node.label)); q.offer(node); while (!q.isEmpty()) { UndirectedGraphNode cur = q.poll(); for (UndirectedGraphNode n : cur.neighbors) { if (map.containsKey(n)) continue; map.put(n, new UndirectedGraphNode(n.label)); q.offer(n); } } q.offer(node); HashSet<UndirectedGraphNode> set = new HashSet<>(); set.add(node); while (!q.isEmpty()) { UndirectedGraphNode cur = q.poll(); UndirectedGraphNode newNode = map.get(cur); for (UndirectedGraphNode n : cur.neighbors) { newNode.neighbors.add(map.get(n)); if (set.contains(n)) continue; set.add(n); q.offer(n); } } return map.get(node); }
第二次遍历图的另一种写法, 我是每次都记不住这个Entry的用法啊!!
1 2 3 4 5 6 7 8
for (Map.Entry<UndirectedGraphNode, UndirectedGraphNode> entry : map.entrySet()) { UndirectedGraphNode element = entry.getKey(); for (UndirectedGraphNode neighbor : element.neighbors) { map.get(element).neighbors.add(map.get(neighbor)); } } return map.get(node);
近期评论