最快的连续循环检测

问题描述

我正在尝试构建一个有向图实现,我可以从中添加删除节点/边,并且我可以查询是否有任何节点参与循环。通过参与,我的意思是存在一条从该节点返回到自身的路径。现在,每当我查询单个节点时,我都必须在该节点上运行 DFS,如果我可以再次访问该节点,则返回。但是,我想通过允许用户一次查询多个节点来扩展我的查询功能,所以我想使用比简单地多次运行 DFS 更复杂的东西。有人有什么建议吗?

解决方法

对于那里的任何人,我最终使用了 Tarjan 的强连接组件算法。在每次运行算法期间,我都会跟踪访问了哪些节点,如果我查询已经访问过的节点,我将跳过该节点。最终,对于单个查询,我最多访问了图中的每个节点一次。