c# - 在有机图中查找循环

标签 c# detection cycle

我想在有机构建的图中找到所有循环。简而言之,当两个分支或路径终止于一个公共(public)顶点时,就会发生循环。有点像
1->2->3->4
1->5->4
形成1->2->3->4->5->1的循环。

由于图形的性质,我不能使用 DFS 或类似算法,因为没有后边。我找到了 Find All Cycle Bases In a Graph, With the Vertex Coordinates GivenAlgorithms to Identify All the Cycle Bases in a UnDirected Graph进入正确的方向,但在两个线程中没有提出有效的算法。

是否有伪代码或实现形式的优化解决方案,或者我应该倾向于任何提供的解决方案并自己优化它?在后一种情况下,我应该为此目的使用哪个提供的代码示例?

期待您的回复。

最佳答案

我认为 DFS 是否适合您。

探索图直到遇到已经探索过的顶点

这是伪代码:

function DFSFindCycle(Start, Goal)
push(Stack,Start)
while Stack is not empty
    var Node := Pop(Stack)
    Color(Node, Grey)
    for Child in ExpandNotExploredEdges(Node)
        if Node.color != White
    return true 
        if Node.color = White
           push(Stack, Child)
           label edge e, Node:Child as explored
    Color(Node, Black)
retrun false

希望对你有帮助

关于c# - 在有机图中查找循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16647651/

相关文章:

c# - 切换 RIDEV_CAPTUREMOUSE 时的奇怪行为 | RIDEV_NOLEGACY

ios - 如果两个 iBeacon 靠得很近,一个信号能否在传输到设备 (iPhone) 时覆盖另一个信号

c# - Vista 风格的资源管理器/文件夹 View

android vision face 找不到耳朵

android - 轮廓脸,戴眼镜检测不好

algorithm - 找到图中形成环的最重边

javascript - 当一个简单的 For Loop 工作正常时,我的 forEach 方法有什么问题

jquery:如何更改循环脚本的主题标签/地址栏名称

c# - 将 XPath 表达式排序为文档顺序

c# - 不同品牌的网站版本、资源文件?