在断开连接的标记无向图中,根据边的标签查找所有循环?

Find all cycles based on label of edge in a disconnected labeled Un-directed graph?

1.The 循环在此图中有效的条件是,形成循环的边应至少有一个共同的标签。
2.循环不被视为循环。
3. Graph可能有很多断开连接的组件。

考虑下图

有效周期为
1. C,D,E(因为T3在他们中间很常见)。
2. F,G,H(其中常见T4)

无效循环是
1. A(循环不算循环)
2. A,B,C(因为没有找到共同的标签)。

目标是找到那些有效的循环,并将顶点与单独形成循环的公共标签一起存储(可能在哈希 table 中,循环的顶点作为键,公共标签作为值)。

可以应用于此类问题的最佳循环检测算法是什么。

提前致谢。

我能想到的最简单的解决方案是根据边标签将这些图分开。

例如你有这张图:

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找到循环。

我建议使用 this article about finding all cycles in an undirected graph 中描述的算法。

但是,需要进行的小修改是您必须 运行 算法描述 k 次迭代,其中 k 是不同标签的数量。此外,每次 运行 算法时,只考虑标签为 T_i.

的边

修改后的运行宁时间为O(k(M + N))。请注意,这避免了 "create" k 分离图表的需要,如 malioboro 所述。