我知道这个问题有很多答案.但是,我发现它们中没有一个能够真正实现它.
有人认为一个循环(几乎)与强连通组件相同(s.在有向图中查找所有循环),因此可以使用为该目标设计的算法.
有人认为找到一个循环可以通过DFS完成并检查后端(s.文件依赖关系的boost图文档).
我现在想对是否可以通过DFS检测图中的所有循环并检查后沿有一些建议?
http://www.me.utexas.edu/~bard/IP/Handouts/cycles.pdf(在SO上找到)陈述了一种基于循环基础的方法.我个人而言,我觉得它不是很直观,所以我正在寻找一个不同的解决方案.
编辑:我最初的意见显然是错误的.S."Moron"的下一个回答.
初步意见:我的观点是它确实可以这样工作,因为DFS-VISIT(DFS的伪代码)刚刚进入尚未访问过的每个节点.从这个意义上讲,每个顶点都表现出一个潜在的循环开始.此外,由于DFS每次访问每个边缘,因此也会覆盖通向循环起点的每条边.因此,通过使用DFS和后沿检查,确实可以检测图中的所有周期.注意,如果存在具有不同数量的参与者节点的循环(例如,三角形,矩形等),则必须进行额外的工作以区分每个循环的实际"形状".
给定平面中的一些点(高达500点),没有3个共线.我们必须确定顶点来自给定点并且其中包含正好N个点的三角形的数量.如何有效地解决这个问题?天真的O(n ^ 4)算法太慢了.有更好的方法吗?
math geometry combinatorics computational-geometry triangle-count
我创建了一个有1000条边的igraph.我的目标是提取在该igraph中找到的所有三角形,但包括标签而不仅仅是那个数字.我还希望它是一个有3列的数据框形式(三角形的每个节点一个)
我试过简单地打电话:
triangles(graph)
Run Code Online (Sandbox Code Playgroud)
并在列中返回名称全部在一列中:
+ 28431/204 vertices, named:
[1] node_a
[2] node_b
[3] node_c
[4] node_a
[5] node_b
[6] node_d
[7] node_a
[8] node_b
[9] node_e
[10] node_a
+ ... omitted several vertices
Run Code Online (Sandbox Code Playgroud)
当我尝试:
adjacent.triangles(graph)
Run Code Online (Sandbox Code Playgroud)
它返回所有数字但不返回节点的名称:
[1] 15 103 45 121 152 78 325 325 3 35 90 0 488 283 3 0 325 325 325 325 78 21 190 3
[25] 133 0 47 167 167 6 3 325 505 415 0 36 78 325 78 78 90 6 …Run Code Online (Sandbox Code Playgroud)