133. Clone Graph

 

给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。

图中的每个节点都包含它的值 valint) 和其邻居的列表(list[Node])。

class Node {
    public int val;
    public List<Node> neighbors;
}

 

测试用例格式:

简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。

邻接列表 是用于表示有限图的无序列表的集合。每个列表都描述了图中节点的邻居集。

给定节点将始终是图中的第一个节点(值为 1)。你必须将 给定节点的拷贝 作为对克隆图的引用返回。

 

 1 """
 2 # Definition for a Node.
 3 class Node(object):
 4     def __init__(self, val = 0, neighbors = []):
 5         self.val = val
 6         self.neighbors = neighbors
 7 """
 8 class Solution(object):
 9     def cloneGraph(self, node):
10         """
11         :type node: Node
12         :rtype: Node
13         """
14 
15         if(node==None):return None
16 
17         dic={}
18         dic[node]=Node(node.val)
19         que=[node]
20 
21         while(len(que)!=0):
22             # 出队一个节点
23             cur=que.pop(0)
24 
25             # 遍历队头节点的所有邻接点
26             for nb in cur.neighbors:
27                 # 如果nb还没有复制节点
28                 if nb not in dic:
29                     nb_copy=Node(nb.val)
30                     dic[nb]=nb_copy
31                     dic[cur].neighbors.append(nb_copy)
32 
33                     que.append(nb)
34                 # 如果已经有了nb的复制节点,就复制cur-nb 和 dic[cur]-dic[nb]之间的映射关系
35                 else:
36                     dic[cur].neighbors.append(dic[nb])
37         return dic[node]
38 
39 
40             

 

posted @ 2020-03-22 09:37  7aughing  阅读(127)  评论(0编辑  收藏  举报