其他分享
首页 > 其他分享> > 797. 所有可能的路径(图的遍历)

797. 所有可能的路径(图的遍历)

作者:互联网

 

难度中等

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)

 graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

 

示例 1:

输入:graph = [[1,2],[3],[3],[]]
输出:[[0,1,3],[0,2,3]]
解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3

示例 2:

输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]
输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]
   
class Solution {
public:
    vector<vector<int>> res;
    void dfs(vector<int>& path, vector<vector<int>>& graph, int cur_node) {
        path.emplace_back(cur_node);
        if (graph.size()-1 == cur_node) {
            res.emplace_back(path);
            // 可以在这直接 return,但要 pop_back 正确维护 path
            // path.pop_back();
            // return;
            // 不 return 也可以,因为图中不包含环,不会出现无限递归
        }
        for(auto nenbor: graph[cur_node]) {
            dfs(path,graph,nenbor);
        }
        path.pop_back();
    }
    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
        vector<int> path;
        dfs(path,graph,0);
        return res;
    }
};

 

标签:797,遍历,cur,graph,路径,back,vector,path,节点
来源: https://www.cnblogs.com/zle1992/p/16279145.html