深度优先算法-回溯算法-797. 所有可能的路径

Problem: 797. 所有可能的路径

Reference

代码随想录 (programmercarl.com)

思路

这是一道经典的深度优先算法,精华在于回溯,我们遍历当前节点的相邻节点递归进行广度搜索,找到终点后,回溯到0,找不到终点也回溯到0。

这个回溯相当精妙,不好描述:

我知道怎么写,也知道是怎么一回事,就是无法用言语表达

SmartSelect_20240318_131224_Samsung Notes.jpg

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

class Solution {

public:

    vector<int> path;

    vector<vector<int>> res;

    void back_tracing(vector<vector<int>>& graph, int x) {

        // 终止

        if (x == graph.size() - 1) {

            res.push_back(path);

            return;

        }

        for (int i = 0; i < graph[x].size(); i++) {

            path.push_back(graph[x][i]);

            back_tracing(graph, graph[x][i]);

            // 回溯

            path.pop_back();

        }

    }



    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {

        path.push_back(0);

        back_tracing(graph, 0);

        return res;

    }

};