题目描述:
给定一个有 n
个节点的有向无环图,用二维数组 graph
表示,请找到所有从 0
到 n-1
的路径并输出(不要求按顺序)。
graph
的第 i
个数组中的单元都表示有向图中 i
号节点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a ),若为空,就是没有下一个节点了。
示例:
思路:题目要求找到0 - n-1的所有路径,如果只需要找到一条可行路径只需要考虑深度搜索即可,若要求找到所有可行路径则需要再该基础上进行回溯
class Solution {
public static List<List<Integer>> allPathsSourceTarget(int[][] graph) {
List<List<Integer>> result = new ArrayList<>(); //存储结果
List<Integer> list = new ArrayList<Integer>();
list.add(0);
dfs(list,graph,0,graph.length-1,result);
return result;
}
public static void dfs(List<Integer> list,int[][] graph,int temp,int end,List<List<Integer>> result){
if(graph.length-1 == temp){ //当前节点等于n-1,存储结果,并返回
//直接存储list会导致,下次修改list时result中存储的值改变
result.add(new ArrayList<>(list));
return;
}
int[] arr = graph[temp];
for(int i = 0;i<arr.length;i++){
//扩展当前节点的所有相邻节点
list.add(arr[i]);
dfs(list,graph,arr[i],end,result);
//移除当前相邻节点
list.remove(list.size()-1);
}
}
}