1。在此图中使一个循环有效的条件是,构成一个循环的边应在所有边之间至少具有一个共同的标签。
2.循环不视为循环。
3.图可能有很多断开的组件。
考虑下图
有效周期为
1. C,D,E(因为T3是常见的)。
2. F,G,H(其中T4很常见)。
无效循环是
1. A(循环不视为循环)
2. A,B,C(因为未找到通用标签)。
目标是找到那些有效的循环并将顶点与分别形成循环的公共标签一起存储(可以在哈希表中,以循环的顶点作为键,将公共标签作为值)。
什么是可以应用于此类问题的最佳周期检测算法。
谢谢。
答案 0 :(得分:0)
我认为最简单的解决方案是根据边缘标签将这些图形分开。
例如,您具有以下图表:
A --T1-- B
B --T2,T1-- C
C --T3,T1-- A
因为有三个标签,所以要基于边缘创建三个图形。
T1:
A --T1-- B
B --T1-- C
C --T1-- A
T2:
B --T2-- C
T3:
C --T3-- A
之后,您可以执行Depth First Search (DFS) algorithm来查找循环。
答案 1 :(得分:0)
我建议使用this article about finding all cycles in an undirected graph中描述的算法。
但是,需要做的小修改是您必须运行描述的k
迭代算法,其中k
是不同标签的数量。此外,每次运行算法时,仅考虑标签为T_i
的边。
修改后的运行时间为O(k(M + N))
。请注意,这避开了按malioboro所述“创建” k
单独图形的需求。