From 7bd81669f2d8313513287aa1691011ef0151fb55 Mon Sep 17 00:00:00 2001
From: programmercarl <826123027@qq.com>
Date: Mon, 27 Feb 2023 09:09:33 +0800
Subject: [PATCH] Update
---
problems/0797.所有可能的路径.md | 1 -
problems/0841.钥匙和房间.md | 18 ++++++++----------
2 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/problems/0797.所有可能的路径.md b/problems/0797.所有可能的路径.md
index 79fa5b9b..eb3f7fb4 100644
--- a/problems/0797.所有可能的路径.md
+++ b/problems/0797.所有可能的路径.md
@@ -4,7 +4,6 @@
参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!
-看一下 算法4,深搜是怎么讲的
# 797.所有可能的路径
diff --git a/problems/0841.钥匙和房间.md b/problems/0841.钥匙和房间.md
index 5556922c..a973ab56 100644
--- a/problems/0841.钥匙和房间.md
+++ b/problems/0841.钥匙和房间.md
@@ -56,7 +56,7 @@
所以本题是一个有向图搜索全路径的问题。 只能用深搜(DFS)或者广搜(BFS)来搜。
-关于DFS的理论,如果大家有困惑,可以先看我这篇题解: [DFS理论基础](https://leetcode.cn/problems/all-paths-from-source-to-target/solution/by-carlsun-2-66pf)
+关于DFS的理论,如果大家有困惑,可以先看我这篇题解: [DFS理论基础](https://programmercarl.com/%E5%9B%BE%E8%AE%BA%E6%B7%B1%E6%90%9C%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html)
**以下dfs分析 大家一定要仔细看,本题有两种dfs的解法,很多题解没有讲清楚**。 看完之后 相信你对dfs会有更深的理解。
@@ -84,9 +84,9 @@ void dfs(const vector>& rooms, int key, vector& visited) {
这决定 终止条件怎么写。
-首先明确,本题中什么叫做处理,就是 visited数组来记录访问过的节点,那么把该节点默认 数组里元素都是false,把元素标记为true就是处理 本节点了。
+首先明确,本题中什么叫做处理,就是 visited数组来记录访问过的节点,该节点默认 数组里元素都是false,把元素标记为true就是处理 本节点了。
-如果我们是处理当前访问的节点,当前访问的节点如果是 true ,说明是访问过的节点,那就终止本层递归,如果不是true,我们就把它赋值为true,因为我们处理本层递归的节点。
+如果我们是处理当前访问的节点,当前访问的节点如果是 true ,说明是访问过的节点,那就终止本层递归,如果不是true,我们就把它赋值为true,因为这是我们处理本层递归的节点。
代码就是这样:
@@ -105,7 +105,7 @@ void dfs(const vector>& rooms, int key, vector& visited) {
}
```
-如果我们是处理下一层访问的节点,而不是当前层。那么就要在 深搜三部曲中第三步:处理目前搜索节点出发的路径 的时候对 节点进行处理。
+如果我们是处理下一层访问的节点,而不是当前层。那么就要在 深搜三部曲中第三步:处理目前搜索节点出发的路径的时候对 节点进行处理。
这样的话,就不需要终止条件,而是在 搜索下一个节点的时候,直接判断 下一个节点是否是我们要搜的节点。
@@ -125,7 +125,7 @@ void dfs(const vector>& rooms, int key, vector& visited) {
}
```
-可以看出,如果看待 我们要访问的节点,直接决定了两种不一样的写法,很多同学对这一块很模糊,其实做过这道题,也没有思考到这个维度上。
+可以看出,如果看待 我们要访问的节点,直接决定了两种不一样的写法,很多录友对这一块很模糊,可能做过这道题,但没有思考到这个维度上。
3. 处理目前搜索节点出发的路径
@@ -136,7 +136,7 @@ void dfs(const vector>& rooms, int key, vector& visited) {
看上面两个版本的写法中, 好像没有发现回溯的逻辑。
-我们都知道,有递归就有回溯,回溯就在递归函数的下面, 那么之前我们做的dfs题目,都需要回溯操作,例如:[797.所有可能的路径](https://leetcode.cn/problems/all-paths-from-source-to-target/solution/by-carlsun-2-66pf/), **为什么本题就没有回溯呢?**
+我们都知道,有递归就有回溯,回溯就在递归函数的下面, 那么之前我们做的dfs题目,都需要回溯操作,例如:[797.所有可能的路径](https://programmercarl.com/0797.%E6%89%80%E6%9C%89%E5%8F%AF%E8%83%BD%E7%9A%84%E8%B7%AF%E5%BE%84.html), **为什么本题就没有回溯呢?**
代码中可以看到dfs函数下面并没有回溯的操作。
@@ -144,7 +144,7 @@ void dfs(const vector>& rooms, int key, vector& visited) {
**那什么时候需要回溯操作呢?**
-当我们需要搜索一条可行路径的时候,就需要回溯操作了,因为没有回溯,就没法“调头”, 如果不理解的话,去看我写的 [797.所有可能的路径](https://leetcode.cn/problems/all-paths-from-source-to-target/solution/by-carlsun-2-66pf/) 的题解。
+当我们需要搜索一条可行路径的时候,就需要回溯操作了,因为没有回溯,就没法“调头”, 如果不理解的话,去看我写的 [797.所有可能的路径](https://programmercarl.com/0797.%E6%89%80%E6%9C%89%E5%8F%AF%E8%83%BD%E7%9A%84%E8%B7%AF%E5%BE%84.html) 的题解。
以上分析完毕,DFS整体实现C++代码如下:
@@ -206,7 +206,7 @@ public:
```
-本题我也给出 BFS C++代码,至于BFS,我后面会有单独文章来讲,代码如下:
+本题我也给出 BFS C++代码,[BFS理论基础](https://programmercarl.com/%E5%9B%BE%E8%AE%BA%E6%B7%B1%E6%90%9C%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html),代码如下:
```CPP
class Solution {
@@ -241,8 +241,6 @@ public:
};
```
-
-
## 其他语言版本
### Java