leet-code/src/main/java/leetcode/editor/cn/CloneGraph.java

131 lines
3.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
//
// 图中的每个节点都包含它的值 valint 和其邻居的列表list[Node])。
//
// class Node {
// public int val;
// public List<Node> neighbors;
//}
//
//
//
// 测试用例格式:
//
// 简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1val = 1第二个节点值为 2val = 2以此类推。该图在测试用例中使用邻
//接列表表示。
//
// 邻接列表 是用于表示有限图的无序列表的集合。每个列表都描述了图中节点的邻居集。
//
// 给定节点将始终是图中的第一个节点(值为 1。你必须将 给定节点的拷贝 作为对克隆图的引用返回。
//
//
//
// 示例 1
//
//
//
// 输入adjList = [[2,4],[1,3],[2,4],[1,3]]
//输出:[[2,4],[1,3],[2,4],[1,3]]
//解释:
//图中有 4 个节点。
//节点 1 的值是 1它有两个邻居节点 2 和 4 。
//节点 2 的值是 2它有两个邻居节点 1 和 3 。
//节点 3 的值是 3它有两个邻居节点 2 和 4 。
//节点 4 的值是 4它有两个邻居节点 1 和 3 。
//
//
// 示例 2
//
//
//
// 输入adjList = [[]]
//输出:[[]]
//解释:输入包含一个空列表。该图仅仅只有一个值为 1 的节点,它没有任何邻居。
//
//
// 示例 3
//
// 输入adjList = []
//输出:[]
//解释:这个图是空的,它不含任何节点。
//
//
// 示例 4
//
//
//
// 输入adjList = [[2],[1]]
//输出:[[2],[1]]
//
//
//
// 提示:
//
//
// 节点数不超过 100 。
// 每个节点值 Node.val 都是唯一的1 <= Node.val <= 100。
// 无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
// 由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
// 图是连通图,你可以从给定节点访问到所有节点。
//
// Related Topics 深度优先搜索 广度优先搜索 图 哈希表 👍 393 👎 0
package leetcode.editor.cn;
import com.code.leet.entiy.Node;
import java.util.ArrayList;
import java.util.HashMap;
//133:克隆图
class CloneGraph{
public static void main(String[] args) {
//测试代码
Solution solution = new CloneGraph().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> neighbors;
public Node() {
val = 0;
neighbors = new ArrayList<Node>();
}
public Node(int _val) {
val = _val;
neighbors = new ArrayList<Node>();
}
public Node(int _val, ArrayList<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
}
*/
class Solution {
private HashMap<Node, Node> use = new HashMap<>();
public Node cloneGraph(Node node) {
if (node == null) {
return node;
}
if (use.containsKey(node)) {
return use.get(node);
}
Node cloneNode = new Node(node.val, new ArrayList());
use.put(node, cloneNode);
for (Node neighbor: node.children) {
cloneNode.children.add(cloneGraph(neighbor));
}
return cloneNode;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}