Graph 旋回和复杂旋回。如何在图表中找到它们?

Graph 旋回和复杂旋回。如何在图表中找到它们?,graph,chemistry,Graph,Chemistry,我有一个cif格式的分子。我不认为格式真的很重要,但是为那些感兴趣的人提供它。这个文件里面有很多数据。最重要的是(文件的这一部分实际上以图形的形式描述了分子)这一部分: 017 N1 C2 SING N N 1 017 N1 H11 SING N N 2 017 N1 H12 SING N N 3 017 C2 C3 DOUB Y N 4 017 C2 C7 SING Y N 5 017 C3 C4 SING Y N 6 这不是整个文件,只是

我有一个cif格式的分子。我不认为格式真的很重要,但是为那些感兴趣的人提供它。这个文件里面有很多数据。最重要的是(文件的这一部分实际上以图形的形式描述了分子)这一部分:

017 N1  C2   SING N N 1  
017 N1  H11  SING N N 2  
017 N1  H12  SING N N 3  
017 C2  C3   DOUB Y N 4  
017 C2  C7   SING Y N 5  
017 C3  C4   SING Y N 6
这不是整个文件,只是一个示例。这种分子可能含有许多环状结构。芳香族,我可以用6列中的Y标志来定义。但也有其他的周期,它们可以是完全不同的:或者像那样或那样:。甚至是这样的:

我需要的是以这样的方式提取所有的循环,如果两个循环共享键,就像在第一个例子中,它们被认为是一个循环。Tarjan的算法在这里不起作用,因为每个节点只运行一次。那我该怎么做呢?
请提供尽可能详细的信息。我对诸如OpenBabel之类的库不太感兴趣,因为我将用Swift编写这个东西,并使用cif文件中的图形描述。

对于您的第一个图表,您是否只想输出一个循环(由外圈组成)?我真正想要的是找到所有的循环并重新编写这样的cif文件,假设C2和C3是环成员,在这种情况下:
017n1 C2R SING N 1 017n1 H11 SING N 2 017n1 H12 SING N 3 017c2r C3R DOUB Y N 4 017c2r C7 SING Y N 5 017 C3R C4 SING Y N 6
,也让C7是不同环的成员,在这种情况下,我重写文件如下:
017n1 C2R1 SING N N 1 017n1 H11 SING N 2 017n1 H12 SING N 3 017c2r1 C3R1 DOUB Y N 4 017 C2R1 C7R2 SING Y N 5 017 C3R1 C4 SING Y N 6
或在单独的列中。是的,我希望它被视为一个结构。结构1的所有原子应命名为atomNameR1。我希望这个结构也一样:看起来它可能有用。之后,我认为可以对循环集进行划分,这样如果两个循环共享一条边,它们就在同一个子集中。我不确定最好的方法是什么。@KlausWarzecha我从PDB CIF文件中获取了以下数据: