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求解所有路径,程序如下所示:
class Solution {
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
List<Integer> list = new ArrayList<>();
List<List<Integer>> result = new ArrayList<>();
dfs(graph, new boolean[graph.length], 0, list, result);
return result;
}
public void dfs(int[][] graph, boolean[] visited, int cur, List<Integer> list, List<List<Integer>> result){
if (cur > graph.length){
return;
}
list.add(cur);
if (cur == graph.length - 1){
result.add(new ArrayList<Integer>(list));
return;
}
visited[cur] = true;
for (int v : graph[cur]){
if (!visited[v]){
dfs(graph, visited, v, list, result);
list.remove(list.size() - 1);
}
}
visited[cur] = false;
}
}