暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

797. All Paths From Source to Target 求所有路径

程序媛的梦想 2019-08-23
300

题意:用一个二维数组来描述有向图,grap[i]表示i号结点分别指向grap[i]中的元素。如grap[0] = {1, 2}, 表示0指向1,0指向和2。grap[1] = {3}, 表示1指向3。让找出所有从第0号结点到第N-1号结点的路径。


思路:DFS求解所有路径。

时间复杂度:O(n²)  ;空间复杂度:O(n).  n为二维数组的长度。

 1class Solution {
2    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
3        List<Integer> list = new ArrayList<>();
4        List<List<Integer>> result = new ArrayList<>();
5        dfs(graph, new boolean[graph.length], 0list, result);
6        return result;
7    }
8
9    // DFS。visited: 标记每一行是否访问过
10    public void dfs(int[][] graph, boolean[] visited, int cur, List<Integer> listList<List<Integer>> result){
11        if (cur > graph.length) return;
12        list.add(cur); // 小于等于的,加入list
13        if (cur == graph.length - 1){ // 路径的长度等于二维数组的长度-1
14            result.add(new ArrayList<Integer>(list));
15            return// 找到了就返回
16        }
17        visited[cur] = true// 还没结束,则设置为已访问过
18        for (int v : graph[cur]){ // 遍历
19            if (!visited[v]){
20                dfs(graph, visited, v, list, result); // 递归
21                list.remove(list.size() - 1); // 删掉最后加入的,回溯的关键
22            }
23        }
24        visited[cur] = false// 归位为未访问,这个不要忘了!
25    }

文章转载自程序媛的梦想,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论