【Leetcode】133. Clone Graph

1 克隆一个无向图,无向图中的每一个节点包括一个label和一个邻居节点集

2 深度拷贝的时候,除了要拷贝节点外,还要将其邻居节点放在一个vector中

3 可以使用一个hashtable来对应节点值和新生成的节点

4 图的遍历可以使用DFS和BFS,DFS一般用递归实现,有时也可以用stack实现,BFS一般用queue实现

5 此题的知识点:图的遍历和hashtable拷贝的方法,key存原始值,value存copy值,对于neighbors,使用BFS或DFS来拷贝;BFS可以帮助找到最短路径

6 BFS:将头结点入queue,每出列一个node,检查其所有的neighbors,如果没visited过,就入队,并更新neighbor。

然后更新新的neighbor列表。

7 为了防止节点被重复克隆或者进入无限循环,我们需要记录哪些节点被克隆过了

8 克隆图的一个难点是,一个节点的邻居可能已经出现过,这样只需要把指针加到邻居集合中去就可以了;也有可能这个节点还没出现过,就需要建一个这个节点;因此需要建立一个hashtable,如果这个节点已经创建过,就返回copy,否则就创建

9 因为图中可能存在环,所以直接复制节点和它的邻居节点,并对它的邻居节点进行相同操作,很容易进入死循环

10 因为返回的也是无向图,所以首先建立一个root节点;利用stack做DFS

11 hashtable是node.label和copy node之间映射

12 node copy好后,还要更新其邻居

13 BFS和deque结合起来使用,每次都调用popleft函数


1 使用hashmap,原node的label是key,新的node是value

2 使用BFS从根节点开始遍历,对于此节点的所有邻居节点,如果其没有在dic中的话,需要创建,创建后还需要append到copy后的邻居节点中去

3 同时要更新queue,不在dic中的节点都要append到queue中去




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原题 克隆一张无向图,图中的每个节点包含一个 label 和一个表 neighbors。你的程序需要返回一个经过深...
    Jason_Yuan阅读 5,585评论 0 0
  • Clone an undirected graph. Each node in the graph contain...
    stevewang阅读 3,471评论 0 0
  • 解题报告 题目的要求是clone一个无向图。这个无向图的表达方式类似于adjacency list,但是不一样的地...
    __LINE__阅读 1,150评论 0 0
  • 题意:克隆一个无向图。 思路:因为是克隆所以需要一个map来存储克隆的映射关系,我们可以从给定的第一个节点向它的n...
    ShutLove阅读 1,488评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,350评论 0 33