LeetCode Clone Graph
LeetCode解題のClone Graph
原題
無方向図をコピーします.図の各ノードには、独自のラベルと隣接するノードのリストがあります.
注意点: なし
例:
入力:
出力:
問題を解く構想.
図にループが存在する可能性があるため、ノードとその隣接ノードを直接コピーし、その隣接ノードを同じ操作でデッドサイクルに入る可能性があります.ループ・アクセスを回避するために、コピーしたノードをキャッシュするには、フラグとノードからなる辞書を使用して、アクセスしたノードを記録します.隣接関係を介してノードにアクセスする場合、初めてアクセスされた場合は、スタックに追加します.スタック内の要素は、隣接する要素にアクセスし続けることを示し、アクセスされたことを記録し、新しくアクセスされたノードと隣接するノードの隣接リストを記録します.スタックが空の場合、すべてのノードがアクセス済みであり、図もコピーに成功したことを示します.
ACソース
私のGithub(https://github.com/gavinfish/LeetCode-Python)を使用して、関連するソースコードを取得します.
原題
無方向図をコピーします.図の各ノードには、独自のラベルと隣接するノードのリストがあります.
注意点:
例:
入力:
1
/ \
/ \
0 --- 2
/ \
\_/
出力:
1
/ \
/ \
0 --- 2
/ \
\_/
問題を解く構想.
図にループが存在する可能性があるため、ノードとその隣接ノードを直接コピーし、その隣接ノードを同じ操作でデッドサイクルに入る可能性があります.ループ・アクセスを回避するために、コピーしたノードをキャッシュするには、フラグとノードからなる辞書を使用して、アクセスしたノードを記録します.隣接関係を介してノードにアクセスする場合、初めてアクセスされた場合は、スタックに追加します.スタック内の要素は、隣接する要素にアクセスし続けることを示し、アクセスされたことを記録し、新しくアクセスされたノードと隣接するノードの隣接リストを記録します.スタックが空の場合、すべてのノードがアクセス済みであり、図もコピーに成功したことを示します.
ACソース
# Definition for a undirected graph node
class UndirectedGraphNode(object):
def __init__(self, x):
self.label = x
self.neighbors = []
class Solution(object):
def cloneGraph(self, node):
"""
:type node: UndirectedGraphNode
:rtype: UndirectedGraphNode
"""
if not node:
return node
visited = {}
first = UndirectedGraphNode(node.label)
visited[node.label] = first
stack = [node]
while stack:
top = stack.pop()
for n in top.neighbors:
if n.label not in visited:
visited[n.label] = UndirectedGraphNode(n.label)
stack.append(n)
visited[top.label].neighbors.append(visited[n.label])
return first
if __name__ == "__main__":
None
私のGithub(https://github.com/gavinfish/LeetCode-Python)を使用して、関連するソースコードを取得します.