题目的链接在这里:https://leetcode-cn.com/problems/all-paths-from-source-to-target/
题目大意
给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。
译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。
一、示意图
二、解题思路
BFS和DFS
DFS
代码如下:
class Solution {
List<List<Integer>> res=new LinkedList<>();
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
//DFS试试看
List<Integer> list=new LinkedList<>();
//len-1表示终点
int len=graph.length-1;
//找所有从0到最后一个的路径
//list.add(0);
//然后开始递归
//首先把这个位置加入进去吧
list.add(0);
DFS(list,0,len,graph);
return res;
}
private void DFS(List<Integer> list, int i,int len,int[][]graph) {
if(i==len){
//说明到终点了
res.add(new LinkedList<>(list));
return;
}
//不然的话 要开始找从这个点出发 能去什么地方了
int[] temp=graph[i];
//然后一个一个的去DFS
for(int k=0;k<temp.length;k++){
//直接开始递归 现在问题应该在这 应该是加入之后 然后删除掉
list.add(temp[k]);
DFS(list,temp[k],len,graph);
//然后把这个给删了
list.remove(list.size()-1);
}
}
}