练习dfs的一道很好的题目
class Solution {
List<List<Integer>> res=new ArrayList<>();
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
int n= graph.length;
boolean[] st=new boolean[n];//是否已访问过
List<Integer> list=new ArrayList<>();//当前路径
list.add(0);
dfs(list,st,0,graph,n);
return res;
}
/**
* dfs查询路径
* @param path 储存当前路径
* @param st 储存已访问过的元素
* @param u 储存当前要访问的节点
* @param graph 路径数组
* @param n 终点节点(n-1)
*/
private void dfs(List<Integer> path,boolean[] st,int u,int[][] graph,int n){
//当前节点是终点就添加到结果中
if(u==n-1){
res.add(new ArrayList<>(path));
return;
}
int[] nei=graph[u];//u可到达的节点
for(int i:nei){
//遍历当前节点可到达的节点
if(!st[i]){
st[i]=true;
path.add(i);
dfs(path,st,i,graph,n);
//恢复现场
path.remove(path.size()-1);
st[i]=false;
}
}
}
}