Java 递归DFS无向图的圈检测

Java 递归DFS无向图的圈检测,java,graph,depth-first-search,Java,Graph,Depth First Search,我在无向图中编写了一个非常简单的循环检测实现;我对将其应用于任何实际案例都不感兴趣:它只是为了在CS课程中解释周期检测背后的基本思想 我选择了递归DFS,与我在internet上发现的其他实现(使用颜色或两个集)不同,我只为访问的节点使用一个集,我为每个递归调用添加和删除这些节点: boolean hasCycleDfs(Node current, Set<Node> visited) { if (visited.contains(current)) { retu

我在无向图中编写了一个非常简单的循环检测实现;我对将其应用于任何实际案例都不感兴趣:它只是为了在CS课程中解释周期检测背后的基本思想

我选择了递归DFS,与我在internet上发现的其他实现(使用颜色或两个集)不同,我只为访问的节点使用一个集,我为每个递归调用添加和删除这些节点:

boolean hasCycleDfs(Node current, Set<Node> visited) {

   if (visited.contains(current)) {
      return true;
   }

   visited.add(current);
   for (Node neighbour: current.neighbors) {
      if (hasCycleDfs(neighbour, visited)) {
         return true;
      }
   }
   visited.remove(current);
   
   return false;
}
boolean hasCycleDfs(节点当前,已访问集){
if(已访问。包含(当前)){
返回true;
}
已访问。添加(当前);
for(节点邻居:current.neights){
if(hasCycleDfs(邻居,已访问)){
返回true;
}
}
已访问。删除(当前);
返回false;
}
我编写了两个测试,它似乎起了作用:您是否看到任何会破坏此代码的边缘情况

谢谢你,安德里亚