(«График») 797. Все пути от источника к цели

Задав направленный ациклический граф (DAG) из n узлов, помеченных метками от 0 до n — 1, найдите все возможные пути от узла 0 до узла n — 1 и верните их в любом порядке.

Граф задается следующим образом: graph[i] — это список всех узлов, которые можно посетить из узла i (т.е. существует направленное ребро из узла i в узел graph[i][j]).

Пример:

Input: graph = [[1,2],[3],[3],[]]
Output: [[0,1,3],[0,2,3]]
Explanation: There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3.
Вход в полноэкранный режим Выход из полноэкранного режима
class Solution {
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        // we have to find all the possible path from source to destination.
        // we can do that with depth first search.
        //we can keep track of visited nodes in a list in a depth first search manner.
        //if we reach the target node we will store list 'l', and we will backtrack to adjacent nodes of the previous node to check all the possible paths
        List<List<Integer>> list = new ArrayList<>();
        dfs(0,graph,new ArrayList<>(Arrays.asList(0)),list); //initially we are also adding 0 in the list l, as the starting node
        return list;
    }
    public void dfs(int node, int[][] graph,List<Integer> l, List<List<Integer>> list){
        if(node ==graph.length-1){
            list.add(new ArrayList<>(l));
            return;
        }
        // below loop will give array of all adjacent nodes of current node i.e 'node'
        for(int i : graph[node]){
            //take
            l.add(i);
            dfs(i,graph,l,list);
            //don't take
            l.remove(l.size()-1);
        }
    }
}
Войти в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий