标签:public set tco 克隆 yun 简单图 ISE http one
Leetcode之广度优先搜索(BFS)专题-133. 克隆图(Clone Graph)
BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree Level Order Traversal)
给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val
(Int
) 和其邻居的列表(list[Node]
)。
示例:
输入: {"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3","neighbors":[{"$ref":"2"},{"$id":"4","neighbors":[{"$ref":"3"},{"$ref":"1"}],"val":4}],"val":3}],"val":2},{"$ref":"4"}],"val":1} 解释: 节点 1 的值是 1,它有两个邻居:节点 2 和 4 。 节点 2 的值是 2,它有两个邻居:节点 1 和 3 。 节点 3 的值是 3,它有两个邻居:节点 2 和 4 。 节点 4 的值是 4,它有两个邻居:节点 1 和 3 。
提示:
给定一个图,复制这个图,返回拷贝。
思路如下:
1、new一个map,Key用于存储旧的节点,Value用于存储新的节点
2、把node开始加入queue,开始BFS
3、BFS
/* // Definition for a Node. class Node { public int val; public List<Node> neighbors; public Node() {} public Node(int _val,List<Node> _neighbors) { val = _val; neighbors = _neighbors; } }; */ class Solution { public Node cloneGraph(Node node) { if(node==null) return node; Queue<Node> queue = new LinkedList<>(); Map<Node,Node> map = new HashMap<>(); Node ans = new Node(node.val,new ArrayList<>()); map.put(node,ans); queue.offer(node); while(!queue.isEmpty()){ Node temp = queue.poll(); for(Node nb:temp.neighbors){ if(!map.containsKey(nb)){ map.put(nb,new Node(nb.val,new ArrayList<>())); queue.offer(nb); } map.get(temp).neighbors.add(map.get(nb)); } } return ans; } }
Leetcode之广度优先搜索(BFS)专题-133. 克隆图(Clone Graph)
标签:public set tco 克隆 yun 简单图 ISE http one
原文地址:https://www.cnblogs.com/qinyuguan/p/11441492.html