797. 所有可能的路径
给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。
译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。
示例 1:
输入:graph = [[1,2],[3],[3],[]]
输出:[[0,1,3],[0,2,3]]
解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3
代码:
class Solution { public: int n; vector<vector<int>> res; vector<int> subres; bool vis[20]; void dfs(int k,vector<vector<int>> graph) { if (k==n-1) // 如果访问到目标节点 { res.push_back(subres); return; } for(auto i : graph[subres[k]]) // if (!vis[i]) // 由于题目给定无环,所以不用判断是否访问过 { subres.push_back(i); // vis[i]=1; dfs(i,graph); // vis[i]=0; subres.pop_back(); } return; } vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) { n=graph.size(); //memset(vis,0,sizeof(vis)); // vis[0]=1; subres.push_back(0); dfs(0,graph); return res; } };