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
      
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容