Skip to content

Commit da16856

Browse files
committed
Update 0133. 克隆图.md
1 parent d65b8b0 commit da16856

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

Solutions/0133. 克隆图.md

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
### 思路 1:深度优先搜索
4949

50-
1. 使用哈希表 `visitedDict` 来存储原图中被访问过的节点和克隆图中对应节点,键值对为 原图被访问过的节点:克隆图中对应节点。
50+
1. 使用哈希表 `visited` 来存储原图中被访问过的节点和克隆图中对应节点,键值对为 原图被访问过的节点:克隆图中对应节点。
5151
2. 从给定节点开始,以深度优先搜索的方式遍历原图。
5252
1. 如果当前节点被访问过,则返回隆图中对应节点。
5353
2. 如果当前节点没有被访问过,则创建一个新的节点,并保存在哈希表中。
@@ -61,14 +61,14 @@ class Solution:
6161
def cloneGraph(self, node: 'Node') -> 'Node':
6262
if not node:
6363
return node
64-
visitedDict = dict()
64+
visited = dict()
6565

6666
def dfs(node: 'Node') -> 'Node':
67-
if node in visitedDict:
68-
return visitedDict[node]
67+
if node in visited:
68+
return visited[node]
6969

7070
clone_node = Node(node.val, [])
71-
visitedDict[node] = clone_node
71+
visited[node] = clone_node
7272
for neighbor in node.neighbors:
7373
clone_node.neighbors.append(dfs(neighbor))
7474
return clone_node
@@ -81,3 +81,44 @@ class Solution:
8181
- **时间复杂度**:$O(n)$。其中 $n$ 为图中节点数量。
8282
- **空间复杂度**:$O(n)$。
8383

84+
### 思路 2:广度优先搜索
85+
86+
1. 使用哈希表 `visited` 来存储原图中被访问过的节点和克隆图中对应节点,键值对为 原图被访问过的节点:克隆图中对应节点。使用队列`queue` 存放节点。
87+
2. 根据起始节点,创建一个新的节点,并将其添加到哈希表 `visited` 中,即 `visited[node] = Node(node.val, [])`。然后将起始节点放入队列 `queue`中,即 `queue.append(node)`
88+
3. 从队列中取出第一个节点 `node_u`。访问节点 `node_u`
89+
4. 遍历与节点 `node_u` 相连并构成边的节点 `node_v`
90+
1. 如果 `node_v` 没有被访问过(即 `node_v` 不在 `visited` 中):
91+
1. 则根据 `node_v` 创建一个新的节点,并将其添加到哈希表 `visited` 中,即 `visited[node_v] = Node(node_v.val, [])`
92+
2. 然后将 `node_v` 节点放入队列 `queue` 中,即 `queue.append(node_v)`
93+
5. 重复步骤 3 ~ 4,直到队列 `queue` 为空。
94+
6. 广度优先搜索结束,返回起始节点的克隆节点(即 `visited[node]`)。
95+
96+
### 思路 2:代码
97+
98+
```Python
99+
class Solution:
100+
def cloneGraph(self, node: 'Node') -> 'Node':
101+
if not node:
102+
return node
103+
104+
visited = dict()
105+
queue = collections.deque()
106+
107+
visited[node] = Node(node.val, [])
108+
queue.append(node)
109+
110+
while queue:
111+
node_u = queue.popleft()
112+
for node_v in node_u.neighbors:
113+
if node_v not in visited:
114+
visited[node_v] = Node(node_v.val, [])
115+
queue.append(node_v)
116+
visited[node_u].neighbors.append(visited[node_v])
117+
118+
return visited[node]
119+
```
120+
121+
### 思路 2:复杂度分析
122+
123+
- **时间复杂度**:$O(n)$。其中 $n$ 为图中节点数量。
124+
- **空间复杂度**:$O(n)$。

0 commit comments

Comments
 (0)