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:把source点加入path,查看是不是target点,if yes,把path加入result;otherwise,查看该点的邻居,recursively call DFS on each neighbor.
1 class Solution { 2 public: 3 vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) { 4 vector<vector<int>>result; 5 if(graph.size()==0){ 6 return result; 7 } 8 vector<int> path; 9 dfs(result,path,0,graph.size()-1,graph); 10 return result; 11 } 12 private: 13 void dfs(vector<vector<int>>&result, vector<int>&path,int source, int target, vector<vector<int>>& graph){ 14 path.push_back(source); 15 if(source==target){ 16 result.push_back(path); 17 }else{ 18 for(int next: graph[source]){ 19 dfs(result,path,next,target,graph); 20 } 21 } 22 path.pop_back(); 23 } 24 };