Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单根有向无环图循环检测_Java_Algorithm_Graph_Topological Sort - Fatal编程技术网

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|)。