Java 单根有向无环图循环检测
该图只有一个根。并以以下格式保存:Java 单根有向无环图循环检测,java,algorithm,graph,topological-sort,Java,Algorithm,Graph,Topological Sort,该图只有一个根。并以以下格式保存: 0 -> 1, 0 -> 2, 1 -> 3, 1 -> 4, 2 -> 4, 2 -> 5, 4 -> 5, 5 -> 2 (This is the cycle) 使用Java检测图形中是否至少存在一个循环的最有效方法是什么?谢谢 如评论中所述,可能是某种DFS,如 SET isCyclic to false DFS(node) IF isCyclic is true THEN RETU
0 -> 1,
0 -> 2,
1 -> 3,
1 -> 4,
2 -> 4,
2 -> 5,
4 -> 5,
5 -> 2 (This is the cycle)
使用Java检测图形中是否至少存在一个循环的最有效方法是什么?谢谢
如评论中所述,可能是某种DFS,如
SET isCyclic to false
DFS(node)
IF isCyclic is true THEN
RETURN
FOR each neighbor in node.neighbors
IF node.visited is true THEN
SET isCyclic to true
RETURN
SET neighbor.visited to true
DFS(neighbor)
正如在评论中提到的,可能是类似于
SET isCyclic to false
DFS(node)
IF isCyclic is true THEN
RETURN
FOR each neighbor in node.neighbors
IF node.visited is true THEN
SET isCyclic to true
RETURN
SET neighbor.visited to true
DFS(neighbor)
您可以使用Kahn算法(或者DFS)来查找有向图的拓扑排序。如果找不到拓扑排序,则存在一个循环。这两种方法的运行时间在节点数和边数上都是线性的,即O(| V |+| e |)。您可以使用Kahn算法(或者DFS)来查找有向图的拓扑排序。如果找不到拓扑排序,则存在一个循环。这两种方法的运行时间在节点数和边数之间呈线性关系,即O(|V|+|e|)。