Java 到达目标顶点的图遍历

Java 到达目标顶点的图遍历,java,graph,depth-first-search,adjacency-list,Java,Graph,Depth First Search,Adjacency List,我已经解决了以下问题,该问题要求查找从第0个节点到n-1个节点的所有路径。代码运行良好,但我对解决方案的时间复杂性感到困惑。我计算了以下代码的时间复杂度为O(V+E),其中V是顶点,E是顶点之间的边。 因为在DFS中我们通过V个顶点&每个顶点都有E个边,我认为TC是O(V+E) 然而,根据leetcode解决方案部分,该算法的时间复杂度为O(2^N-1 x N)。 我真的不明白leetcode是怎么想出这个TC的。我认为leetcode的时间复杂度不是下面代码的正确时间复杂度 有人能帮我弄清楚时

我已经解决了以下问题,该问题要求查找从第0个节点到n-1个节点的所有路径。代码运行良好,但我对解决方案的时间复杂性感到困惑。我计算了以下代码的时间复杂度为O(V+E),其中V是顶点,E是顶点之间的边。 因为在DFS中我们通过V个顶点&每个顶点都有E个边,我认为TC是O(V+E)

然而,根据leetcode解决方案部分,该算法的时间复杂度为O(2^N-1 x N)。 我真的不明白leetcode是怎么想出这个TC的。我认为leetcode的时间复杂度不是下面代码的正确时间复杂度

有人能帮我弄清楚时间的复杂性吗

Leetcode问题链接:

问题描述:

给出了N个节点的有向无环图。查找从节点0到节点N-1的所有可能路径,并按任意顺序返回它们。 该图如下所示:节点为0,1,…,graph.length-1。图[i]是存在边(i,j)的所有节点j的列表

示例图像:

public List allPathsSourceTarget(int[][]图形){
列表结果=新建ArrayList();
列表路径=新的ArrayList();
添加路径(0);
dfs(图形、结果、路径,0);
返回结果;
}
私有void dfs(int[][]图形、列表结果、列表路径、int节点){
if(node==graph.length-1){
add(newarraylist(path));
返回;
}
int[]边=图形[节点];
用于(整型边:边){
路径。添加(边);
dfs(图形、结果、路径、边);
path.remove(path.size()-1);
}
}

想象一下最坏的情况,节点1到节点N,如果i
public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        path.add(0);
        
        dfs(graph, result, path, 0);
        
        return result;
    }

    private void dfs(int[][] graph, List<List<Integer>> result, List<Integer> path, int node) {
        if(node == graph.length-1) {
            result.add(new ArrayList<>(path));
            return;
        }
        
        int[] edges = graph[node];
        
        for(int edge : edges) {
            
            path.add(edge);
            
            dfs(graph, result, path, edge);
            
            path.remove(path.size()-1);
        }
    }