0
点赞
收藏
分享

微信扫一扫

所有可能的路径

编程练习生J 2021-09-21 阅读 23
今日算法
题目描述:
示例 1:

示例 2:

示例 3:
示例 4:
示例 5:
题目分析:
  1. 有向无环图,不需要考虑死循环(当前节点是否已经遍历过)
  2. 路径输出不需要按照走的顺序
  3. 二维数组行索引代表起点,值代表可以去的点
  4. 起点为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);
        }
    }
}
举报

相关推荐

0 条评论