美文网首页
Clone graph

Clone graph

作者: 穿越那片海 | 来源:发表于2017-08-14 22:12 被阅读0次

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
      

相关文章

网友评论

      本文标题:Clone graph

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