美文网首页
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