Clone graph

Medium, Msc

Question

复制一个无向graph。graph的每个节点包含一个label和以个neighbors序列。

Solution

graph搜索包含DFS和BFS,从两个角度分别给出解答。

DFS

# Definition for a undirected graph node
# class UndirectedGraphNode:
#     def __init__(self, x):
#         self.label = x
#         self.neighbors = []

class Solution:
    # @param node, a undirected graph node
    # @return a undirected graph node
    def cloneGraph(self, node):
        if node ==  None:
            return None
        cmap = {}
        return self.DFS(node, cmap)
    
    def DFS(self, node, cmap):
        if node in cmap:
            return cmap[node]
        nodecopy = UndirectedGraphNode(node.label)
        cmap[node] = nodecopy
        for neighbor in node.neighbors:
            nodecopy.neighbors.append(self.DFS(neighbor,cmap))
        return nodecopy

BFS

# Definition for a undirected graph node
# class UndirectedGraphNode:
#     def __init__(self, x):
#         self.label = x
#         self.neighbors = []

class Solution:
    # @param node, a undirected graph node
    # @return a undirected graph node
    def cloneGraph(self, node):
        if node == None:
            return None
        
        nodeCopy =  UndirectedGraphNode(node.label)
        cmap = {node:nodeCopy}
        queue = collections.deque([node])
        while queue:
            node = queue.popleft()
            for neighbor in node.neighbors:
                if neighbor not in cmap:
                    neighborCopy = UndirectedGraphNode(neighbor.label)
                    cmap[neighbor] = neighborCopy
                    cmap[node].neighbors.append(neighborCopy)
                    queue.append(neighbor)
                else:
                    cmap[node].neighbors.append(cmap[neighbor])
        return nodeCopy
      
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容