美文网首页
Clone Graph

Clone Graph

作者: Mree111 | 来源:发表于2019-10-21 13:37 被阅读0次

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

相关文章

网友评论

      本文标题:Clone Graph

      本文链接:https://www.haomeiwen.com/subject/mwltvctx.html