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