797. All Paths From Source to Target
题目描述:
Given a directed, acyclic graph of N
nodes. Find all possible paths from node 0
to node N-1
, and return them in any order.
The graph is given as follows: the nodes are 0, 1, ..., graph.length - 1. graph[i] is a list of all nodes j for which the edge (i, j) exists.
Example: Input: [[1,2], [3], [3], []] Output: [[0,1,3],[0,2,3]] Explanation: The graph looks like this: 0--->1 | | v v 2--->3 There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3.
Note:
- The number of nodes in the graph will be in the range
[2, 15]
. - You can print different paths in any order, but you should keep the order of nodes inside one path.
解题思路:
使用DFS方法或者回溯法,这里使用的是DFS算法。
代码:
1 class Solution { 2 public: 3 vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) { 4 vector<vector<int> >paths; 5 vector<int> path; 6 dfs(graph, paths, path, 0); 7 return paths; 8 } 9 void dfs(vector<vector<int> >& graph, vector<vector<int> >& paths, vector<int> path, int now) { 10 path.push_back(now); 11 if (now == graph.size() - 1) { 12 paths.push_back(path); 13 return; 14 } 15 for (auto next : graph[now]) { 16 dfs(graph, paths, path, next); 17 } 18 } 19 };