Description
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. Nodes are labeled uniquely.
You need to return a deep copied graph, which has the same structure as the original graph, and any changes to the new graph will not have any effect on the original graph.
Solution
第一步:使用宽度优先搜索 BFS 找到所有的点
第二步:复制所有的点,将映射关系存起来
第三步:找到所有的边,复制每一条边
class Solution:
def cloneGraph(self, node):
root = node
if node is None:
return node
# use bfs algorithm to traverse the graph and get all nodes.
nodes = self.getNodes(node)
# copy nodes, store the old->new mapping information in a hash map
mapping = {}
for node in nodes:
mapping[node] = UndirectedGraphNode(node.label)
# copy neighbors(edges)
for node in nodes:
new_node = mapping[node]
for neighbor in node.neighbors:
new_neighbor = mapping[neighbor]
new_node.neighbors.append(new_neighbor)
return mapping[root]
#BFS to get all node
def getNodes(self, node):
q = [node]
result = set([node])
while q:
head = q.pop(0)
for neighbor in head.neighbors:
if neighbor not in result:
result.add(neighbor)
q.append(neighbor)
return result
网友评论