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,用一个List保存路径,每次尝试所有可能的下一节点,如果到了终点,就记录到结果中
class Solution {
List<List<Integer>> res;
int end;
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
res = new ArrayList<List<Integer>>();
end = graph.length - 1;
List<Integer> list = new ArrayList<Integer>();
list.add(0);
dfs(list, graph);
return res;
}
public void dfs(List<Integer> list, int[][] graph){
int start = list.get(list.size() - 1);
if(start == end){
res.add(new ArrayList<Integer>(list));
}
int[] next = graph[start];
for(int it : next){
if(list.contains(it))
continue;
list.add(it);
dfs(list, graph);
list.remove(list.size() - 1);
}
}
}