题目描述:
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
题目分析:
- 有向无环图,不需要考虑死循环(当前节点是否已经遍历过)
- 路径输出不需要按照走的顺序
- 二维数组行索引代表起点,值代表可以去的点
- 起点为0,终点为dst = graph.length - 1
思路分析:
例用深度优先级遍历求出所有路径,从起点0开始,到达终点dst则记录一次路径并返回。
代码实现:
class Solution {
public List<List<Integer>> results = new ArrayList();
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
int dst = graph.length - 1;
List<Integer> list = new ArrayList<>();
list.add(0); // 添加起点。
dfs(graph, 0, dst, list);
return results;
}
public void dfs(int[][] graph, int src, int dst, List<Integer> list) {
if (src == dst) { // 到达终点.
results.add(new ArrayList(list));
return;
}
for (Integer num : graph[src]) {
list.add(num);
dfs(graph, num, dst, list);
list.remove(num);
}
}
}