首页 > 其他 > 详细

797. All Paths From Source to Target

时间:2020-07-25 11:46:01      阅读:80      评论:0      收藏:0      [点我收藏+]

Given a directed, acyclic graph of N nodes.  Find all possible paths from node 0 to node N-1, and return them in any order.

The graph is given as follows:  the nodes are 0, 1, ..., graph.length - 1.  graph[i] is a list of all nodes j for which the edge (i, j) exists.

Example:
Input: [[1,2], [3], [3], []] 
Output: [[0,1,3],[0,2,3]] 
Explanation: The graph looks like this:
0--->1
|    |
v    v
2--->3
There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3.

Note:

  • The number of nodes in the graph will be in the range [2, 15].
  • You can print different paths in any order, but you should keep the order of nodes inside one path.
class Solution {
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        List<List<Integer>> res = new ArrayList();
        int n = graph.length;
        Map<Integer, List<Integer>> map = new HashMap();
        for(int i = 0; i < graph.length; i++) {
            for(int j = 0; j < graph[i].length; j++) {
                map.computeIfAbsent(i,l -> new ArrayList<>()).add(graph[i][j]);
            }            
        }
        dfs(res, new ArrayList(), map, 0, n - 1);
        return res;
    }
    
    public void dfs(List<List<Integer>> res, List<Integer> list, Map<Integer, List<Integer>> map, int cur, int end) {
        if(cur == end) {
            list.add(cur);
            res.add(new ArrayList(list));       
            return;
        }
        list.add(cur);
        for(int child: map.get(cur)) {
            dfs(res, list, map, child, end);
            list.remove(list.size() - 1);
        }        
        return;
    }
}

先存成图,然后dfs,因为是DAG,所以不用boolean visited[ ]

797. All Paths From Source to Target

原文:https://www.cnblogs.com/wentiliangkaihua/p/13375315.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!