克隆圖-133
阿新 • • 發佈:2021-12-17
克隆圖
題目:克隆圖
給你無向 連通 圖中一個節點的引用,請你返回該圖的 深拷貝(克隆)。
圖中的每個節點都包含它的值 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); } }