Skip to content

Commit 89568a8

Browse files
committed
深度优先搜索算法内容优化
1 parent db4f1c3 commit 89568a8

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

Contents/08.Graph/02.Graph-Traversal/01.Graph-DFS.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
## 1. 深度优先搜索简介
22

3-
> **深度优先搜索算法(Depth First Search)**:英文缩写为 DFS是一种用于搜索树或图结构的算法。所谓深度优先,就是说优先沿着一条路径走到底,直到无法继续深入时再回头
3+
> **深度优先搜索算法(Depth First Search)**:英文缩写为 DFS是一种用于搜索树或图结构的算法。深度优先搜索算法采用了回溯思想,从起始节点开始,沿着一条路径尽可能深入地访问节点,直到无法继续前进时为止,然后回溯到上一个未访问的节点,继续深入搜索,直到完成整个搜索过程
44
5-
深度优先搜索算法采用了回溯思想,该算法从起始点开始,沿着一条路径经可能深入地访问节点,直到无法继续前进时为止,,然后回溯到上一个未访问的节点,继续深入搜索,直到完成整个搜索过程
5+
深度优先搜索算法中所谓的深度优先,就是说优先沿着一条路径走到底,直到无法继续深入时再回头
66

77
在深度优先遍历的过程中,我们需要将当前遍历节点 $u$ 的相邻节点暂时存储起来,以便于在回退的时候可以继续访问它们。遍历到的节点顺序符合「后进先出」的特点,这正是「递归」和「堆栈」所遵循的规律,所以深度优先搜索可以通过「递归」或者「堆栈」来实现。
88

@@ -52,7 +52,7 @@
5252

5353
深度优先搜索算法可以通过递归来实现,以下是基于递归实现的深度优先搜索算法步骤:
5454

55-
1. 定义 $graph$ 为存储无向图的嵌套数组变量,$visited$ 为标记访问节点的集合变量。$start$ 为当前遍历边的开始节点。定义 `def dfs_recursive(graph, start, visited):` 为递归实现的深度优先搜索方法。
55+
1. 定义 $graph$ 为存储无向图的嵌套数组变量,$visited$ 为标记访问节点的集合变量。$u$ 为当前遍历边的开始节点。定义 `def dfs_recursive(graph, u, visited):` 为递归实现的深度优先搜索方法。
5656
2. 选择起始节点 $u$,并将其标记为已访问,即将节点 $u$ 放入 $visited$ 中(`visited.add(u)`)。
5757
3. 检查当前节点 $u$ 是否为目标节点(看具体题目要求)。
5858
4. 如果当前节点 $u$ 是目标节点,则直接返回结果。
@@ -172,6 +172,8 @@ Solution().dfs_stack(graph, "A")
172172

173173
**示例**
174174

175+
- 示例 1:
176+
175177
```python
176178
输入:grid = [
177179
["1","1","1","1","0"],
@@ -180,8 +182,11 @@ Solution().dfs_stack(graph, "A")
180182
["0","0","0","0","0"]
181183
]
182184
输出:1
185+
```
183186

187+
- 示例 2:
184188

189+
```python
185190
输入:grid = [
186191
["1","1","0","0","0"],
187192
["1","1","0","0","0"],
@@ -200,8 +205,8 @@ Solution().dfs_stack(graph, "A")
200205
##### 思路 1:深度优先搜索
201206

202207
1. 遍历 $grid$。
203-
2. 对于每一个字符为 `'1'` 的元素,遍历其上下左右四个方向,并将该字符置为 `0`,保证下次不会被重复遍历。
204-
3. 如果超出边界,则返回 `0`
208+
2. 对于每一个字符为 `'1'` 的元素,遍历其上下左右四个方向,并将该字符置为 `'0'`,保证下次不会被重复遍历。
209+
3. 如果超出边界,则返回 $0$
205210
4. 对于 $(i, j)$ 位置的元素来说,递归遍历的位置就是 $(i - 1, j)$、$(i, j - 1)$、$(i + 1, j)$、$(i, j + 1)$ 四个方向。每次遍历到底,统计数记录一次。
206211
5. 最终统计出深度优先搜索的次数就是我们要求的岛屿数量。
207212

@@ -285,7 +290,7 @@ class Solution:
285290

286291
##### 思路 1:深度优先搜索
287292

288-
1. 使用哈希表 $visitedDict$ 来存储原图中被访问过的节点和克隆图中对应节点,键值对为 原图被访问过的节点:克隆图中对应节点。
293+
1. 使用哈希表 $visitedDict$ 来存储原图中被访问过的节点和克隆图中对应节点,键值对为原图被访问过的节点:克隆图中对应节点
289294
2. 从给定节点开始,以深度优先搜索的方式遍历原图。
290295
1. 如果当前节点被访问过,则返回隆图中对应节点。
291296
2. 如果当前节点没有被访问过,则创建一个新的节点,并保存在哈希表中。

0 commit comments

Comments
 (0)