
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中去



