Java 到达目标顶点的图遍历
我已经解决了以下问题,该问题要求查找从第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的列表 示例图像: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的时间复杂度不是下面代码的正确时间复杂度 有人能帮我弄清楚时
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,如果ipublic 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);
}
}