Time: 20190903
Type: Medium

题目描述

给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 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 到 100 之间。
无向图是一个简单图,这意味着图中没有重复的边,也没有自环。
由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。
必须将给定节点的拷贝作为对克隆图的引用返回

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/clone-graph
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

使用包的话,用copy中的deepcopy方法即可。

实际上可以用DFS和BFS两种方法来解题。

代码

"""
# Definition for a Node.
class Node:def __init__(self, val, neighbors):self.val = valself.neighbors = neighbors
"""
import copy
class Solution:def cloneGraph(self, node: 'Node') -> 'Node':return copy.deepcopy(node)

DFS解法

class Solution:def cloneGraph(self, node: 'Node') -> 'Node':lookup = {}def dfs(node):#print(node.val)if not node: returnif node in lookup:return lookup[node]clone = Node(node.val, [])lookup[node] = clonefor n in node.neighbors:clone.neighbors.append(dfs(n))return clonereturn dfs(node)

相似习题

Leetcode 138. 复制带随机指针的链表

END.

Leetcode 133.克隆图相关推荐

  1. LeetCode 133. 克隆图(图的BFS/DFS)

    1. 题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]). class Node {public:in ...

  2. leetcode —— 133. 克隆图

    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆). 图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node]). class Node { public i ...

  3. Leetcode 133. 克隆图 解题思路及C++实现

    解题思路: 这道题目,一开始看了几遍都没看懂题意,后来找网上的答案才明白是要干啥.其实就是做一次深拷贝的实现.也是比较典型的深度优先搜索问题. 使用C++中的unordered_map<Node ...

  4. 力扣133. 克隆图

    该题克隆图类似二叉树的遍历,是从根节点遍历叶节点. 复制思路:是dfs遍历原节点node,建立HashMap<Node,Node>原节点到克隆节点的映射,然后根据原节点,new出新节点,建 ...

  5. C#LeetCode刷题-图

    图篇 # 题名 刷题 通过率 难度 133 克隆图 18.7% 中等 207 课程表 40.0% 中等 210 课程表 II 40.0% 中等 310 最小高度树 29.5% 中等 332 重新安排行 ...

  6. 作文以记之 ~ 克隆图

    作文以记之 ~ 克隆图 0.前言 1.题目描述 2.解题思路 2.1 方法1 ~ 利用BFS 2.1.1 思路 2.1.2 程序代码 2.2 方法2 ~ 利用 DFS 2.2.1 思路 2.2.2 程 ...

  7. 133. Clone Graph 克隆图

    给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆). 图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node]). class Node {public in ...

  8. 【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph

    LeetCode 133. Clone Graph Solution1: DFS/记忆化递归,参考网址:http://www.cnblogs.com/grandyang/p/4267628.html ...

  9. LeetCode 1490. 克隆 N 叉树(DFS/BFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 给定一棵 N 叉树的根节点 root ,返回该树的深拷贝(克隆). N 叉树的每个节点都包含一个值( int )和子节点的 ...

最新文章

  1. C# 利用Jmail接收邮件
  2. golang 检查ip地址格式 是否正确
  3. 学习quartz定时
  4. 机器学习知识总结系列- 特征工程(1-1)
  5. html控制按钮里面的文字,有谁可以告诉我web网页制作中通过三个按钮控制页面上的一段文字放? 爱问知识人...
  6. 两个有序链表序列的合并
  7. AWS--Lamdba
  8. vector public member function
  9. 笔记20210518正则表达式和面向对象
  10. oms系统应用服务器,OMS、WMS、TMS、ERP之间的关系
  11. DataTable 服务端模式 进行分页 排序搜索
  12. windows编程13-WM_CTLCOLORSTATIC
  13. shell 中如何输出回车符号
  14. R语言使用循环语句一次性画出多幅图
  15. 儿科学类毕业论文文献有哪些?
  16. 网吧服务器用户锁怎么办,如何进行网吧安全模式的锁定与解除
  17. RaSa2.5.x利用Fallback处理超出范围的消息
  18. 初代SAAS平台应用层架构设计
  19. Python实战案例,requests模块,Python实现模拟登录淘宝网
  20. 手机号码转码_通讯录格式转换集锦

热门文章

  1. tensorflow随笔——Yolo v1
  2. 【RobotStudio学习笔记】(八)速度设置
  3. python文件是否存在_Python判断文件是否存在的三种方法
  4. 键盘可以实现向计算机输入数据判断,计算机应用基础—学习指南.docx
  5. redis lettuce 超时_Spring Cache 操作 Redis 实现数据缓存(上)
  6. loss低但精确度低_目标检测中的Loss改进:GIOU
  7. 编程c语言中,向上取整函数_C编程中的函数
  8. testng_TestNG @工厂注释
  9. callable线程池示例_Java Callable Future示例
  10. ROS的学习(六)理解ROS的节点(NODE)