描述
给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。
分析
使用深度优先搜索遍历统计0到n-1的路径个数。
图为有向无环图,搜索过程中不会反复遍历同一个点,因此我们无需判断当前点是否遍历过。
深度遍历最终每条路径都会走到n-1这个结点。
class Solution {
List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
List<Integer> list = new ArrayList<>();
list.add(0);
dfs(graph,0,list);
return ans;
}
public void dfs (int[][] graph, int cur, List<Integer> list) {
if (cur == graph.length - 1) {
ans.add(new ArrayList<>(list));
return;
}
for (int num : graph[cur]) {
list.add(num);
dfs(graph,num,list);
list.remove(list.size()-1);
}
}
}